我写了一个类来读取一个CSV文件,该文件包含4k条记录,72个宽。列表中的'read()'只需要一秒钟,也许......
一旦我成功加载了List,我就有了将每个对象保存到db的一般流程;
char *
循环成功执行后,我调用db.dispose();
我没有在MVC控制器结构之外构建太多类,因为我是新手,所以对我来说很容易;)。我假设我正在使用这种导致指数处理时间问题的方法来占用宝贵的资源。
有关如何提高性能的任何建议?提前谢谢!
答案 0 :(得分:1)
如果您正在使用SQL Server并且愿意使用Entity-framework之外的东西,那么可能对您非常有用的批量复制例程。基本上你要做的是在内存中创建一个表(它是一个.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 :(得分:1)
这个功劳应该归功于Atoms指出“AutoDetectChangesEnabled”参考。我在这里找到了Rick Strahl的精彩文章; http://weblog.west-wind.com/posts/2013/Dec/22/Entity-Framework-and-slow-bulk-INSERTs解释得很好!
我15分钟的处理时间被拉到了45秒钟!
谢谢!