我的文件夹每天都会收到大约 3000 个新的 csv 文件,每个文件包含 50 到 2000 行信息。
目前,有一个流程可以一次选取一个文件,一次选取每一行,然后将其发送到存储过程以将内容插入数据库。
这意味着在一天的时间里,它可能很难在下一个 3000 个文件进入之前浏览完 3000 个文件!
我正在寻求改进这个流程,并有以下想法
- 使用 C# 4.0 的新并行功能允许同时处理多个文件,但仍将各行逐一传递到存储过程
- 创建一个新的临时数据库表,可以一次性将文件中的所有行插入其中,然后对临时表中新添加的行调用存储过程。
- 将流程分为 2 个任务。一项作业将文件中的数据读取到临时数据库表中,另一项作业处理临时表中的行。
关于我如何考虑这样做还有其他想法吗?目前每个文件最多可能需要 20 秒,我真的很想大幅提高性能。
最佳答案
SQL Server 批量插入可能正是您所需要的
http://msdn.microsoft.com/en-us/library/ms188365.aspx
您可能会看到所有这些插入花费很长时间的另一个问题是每次添加行时,您的表可能会重新索引。像这样的搜索将提供很多关于如何从当前程序中获得更好性能的好文章 http://www.google.com/search?q=sql+insert+performance
关于c# - 将文件内容导入数据库的最快且最佳的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5532397/