gpt4 book ai didi

c# - 使用 SQL 批量复制插入约 370 万行会引发 OutOfMemory 异常

转载 作者:太空宇宙 更新时间:2023-11-03 12:33:39 26 4
gpt4 key购买 nike

我使用 SqlBulkCopy 插入大约 370 万行并抛出错误

Exception of type 'System.OutOfMemoryException' was thrown

这是我的代码。列是动态添加的,否则就是直接的代码。

using (var bulkCopy = new SqlBulkCopy(connection))
{
connection.Open();

using (var reader = ObjectReader.Create(inputRecordsToProcess))
{
bulkCopy.BatchSize = 100000;
bulkCopy.BulkCopyTimeout = 0;
bulkCopy.DestinationTableName = schemaName + "." + tableName;

var classProperties = GetClassPropertiesByAttributes<T>();
var i = 0;

foreach (var property in classProperties)
{
bulkCopy.ColumnMappings.Add(property.Item2, property.Item1);
i++;
}

try
{
bulkCopy.WriteToServer(reader);
}
catch (Exception ex)
{
throw;
}
}
}

重要的一点是,我能够插入 ~360 万行,但超过该行时会抛出异常。我需要对代码进行任何更改吗?

这发生在所有服务器上(开发、生产甚至本地)

最佳答案

谢谢大家的回复。

我想出了问题所在。首先,它在调用 SQL 批量复制时没有发生,我认为这可能是因为在上一次运行中,我能够运行比当前少 1000 条记录,所以我认为 SQL 批量复制有局限性或需要设置以处理大量记录。当我调试代码时,我发现在调用数据库插入之前有一个方法调用“将对象类型转换为强类型”,意思是我有一个动态类对象需要转换为强类型对象,所以我循环该方法中的所有记录都可以转换,但在那里失败了。但是,该方法仍然适用于超过 300 万条记录。

所以在谷歌搜索之后,我发现罪魁祸首是“32 位”平台。该应用程序设置为在“任何 CPU”中运行,但选中了“首选 32 位”。当我取消选中时,我能够运行记录并使用 SQL 批量复制将其插入数据库!

当我浏览此链接的答案时,我更改了它 https://social.msdn.microsoft.com/Forums/en-US/ace563e2-66fe-4666-9f04-cbfc90ab59bc/system-out-of-memory-exception-due-to-mismanaged-memory-using-threads?forum=csharplanguage

感谢大家花时间阅读我的帖子!欣赏它!

关于c# - 使用 SQL 批量复制插入约 370 万行会引发 OutOfMemory 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41811793/

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