使用NPOI進行excel批量導入,在數據量較大的時候會出現一個問題:服務器變得越來越卡,CPU占用率超高。那么怎么解決這個問題呢。
1、首先查找占用CPU高的代碼。原以為使用反射和調用過多的方法會占用較高的CPU,但是通過注釋相關模塊,發現了導致CPU飆高的真正原因是DbConxt本身添加和修改模型的代碼:
DbContext.TeacherInfo.Add(TIModel);
DbContext.Set<TeacherInfo>().Attach(TIModel); DbContext.Entry(TIModel).State = EntityState.Modified;
這兩行再普通不過的添加和修改模型的代碼,非常的耗費CPU,注意:這里沒有saveChange,只是添加和修改。在平時單個或者小批量數據的添加和修改沒什么感覺,但是對於大批量的添加和更改時,CPU的占用率就是升起來。所以對於大批量的導入,這種方式要慎用,還是最原始的Sql比較靠譜。
2、經過多方查找,除了查找代碼中比較消耗CPU的程序,在代碼出現死循環的時候CPU也會升高,原因就是:因為一直代碼一直循環,導致沒辦法切換線程去做別的事情,CPU會一直居高不下。那么在大批量數據導入的時候,雖然不是死循環,但是也會長時間的占用線程。解決的辦法就是在循環的時候,讓線程短暫的休息。
Thread.Sleep(10);//減少CPU的使用率
經過這兩步處理,cpu的占用率已經從原來的20+變成5~6了,基本上已經下來了。