Excel批量导入占用CPU率高的问题

使用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了,基本上已经下来了。

 

posted on 2018-01-09 09:07  木头人段  阅读(2598)  评论(0编辑  收藏  举报

导航