gpt4 book ai didi

c# - 使用LINQ2SQL插入大量记录

转载 作者:太空狗 更新时间:2023-10-30 00:29:12 25 4
gpt4 key购买 nike

我们有一个小的 c# 工具,我们将其组合在一起来解析数据文件、构建一些对象并将它们插入到数据库中。

逻辑本质上是。

string [] lines = File.ReadAllLines("C:\\Temp\\Data.dat")

foreach(string line in lines)
{
MyDataObject obj = ParseObject(line);
myDataContext.MyDataObjects.InsertOnSubmit(obj);
}

myDataContext.SubmitChanges();

一开始没问题,因为数据文件每天只有大约 1000 行长但最近这个文件已经增长到大约 30,000 行,而且这个过程变得非常缓慢。

SubmitChanges() 调用的一切都很好,但是一旦它开始转储过程向 DB 插入 30,000 次,它就慢慢停止了。作为测试,我模拟了 30,000 个插入语句并直接从 QA 运行它们。大约用了 8 分钟。

8 分钟后,C#/Linq 版本只完成了大约 25% 的插入。

有人对我如何优化它有任何建议吗?

最佳答案

如果您正在写入大量同类数据,SqlBulkCopy可能是更合适的工具,例如 CsvReader读取行(因为 SqlBulkCopy 可以接受 IDataReader,这意味着您不必将所有 30k 行缓冲到内存中)。

如果数据是 CSV,这可以很简单:

using (CsvReader reader = new CsvReader(path))
using (SqlBulkCopy bcp = new SqlBulkCopy(CONNECTION_STRING))
{
bcp.DestinationTableName = "SomeTable";
bcp.WriteToServer(reader);
}

如果数据更复杂(非 CSV),则 SimpleDataReader可能会有用 - 您只需将其子类化并添加代码来表示每行的数据。

关于c# - 使用LINQ2SQL插入大量记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/974878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com