首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >性能调优:保存记录每500条记录就会呈指数级增长?

性能调优:保存记录每500条记录就会呈指数级增长?
EN

Stack Overflow用户
提问于 2015-09-19 10:46:31
回答 2查看 83关注 0票数 1

我写了一个类来读取CSV文件,其中包含4k条记录,72列宽。列表中的“read()”大概需要一秒钟的时间……

一旦我成功地加载了列表,我就有了将每个对象保存到db的一般流程;

代码语言:javascript
复制
foreach (var object in Objects)
{

  try{
      // check conditions
      // perform conversions on the data and assign to domain object.property
      //....
      //db.object.Add(object);
      //db.savechanges();

   }catch{

        //update log if the try fails   
   }
 }

一旦循环成功执行,我就调用db.dispose();

我没有在MVC控制器结构之外构建太多的类,因为我对此还不熟悉,所以请对我从容不迫;)我假设我使用这种方法占用了宝贵的资源,这导致了指数级的处理时间问题。

对如何提高性能有什么建议吗?提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2015-09-19 11:02:53

如果您正在使用SQL Server,并且希望使用实体框架之外的内容,那么有一个批量复制例程可能对您非常有用。基本上,您要做的是在内存中创建一个表(它是一个.net对象),然后将您的记录添加到其中。一旦您将所有72K记录添加到表中,然后您将立即将其保存到数据库中。因为这使用了针对此场景调优的批量复制功能,所以它的速度非常快。

这里有几篇文章可能会让你入门:

http://www.codeproject.com/Articles/16922/SQL-Bulk-Copy-with-C-Net

http://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy

http://dotnetmentors.com/c-sharp/bulk-upload-into-sql-server-using-sqlbulkcopy-and-c-sharp.aspx

票数 1
EN

Stack Overflow用户

发布于 2015-09-19 11:31:52

这个荣誉真的应该归功于原子指出了"AutoDetectChangesEnabled“参考。我在这里找到了Rick Strahl写的一篇很棒的文章;http://weblog.west-wind.com/posts/2013/Dec/22/Entity-Framework-and-slow-bulk-INSERTs很好地解释了这一点!

我的15分钟处理时间刚刚降到45秒!

谢谢!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32663623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档