我使用SqlBulkCopy插入大约370万行并抛出错误
类型的异常' System.OutOfMemoryException'被扔了
这是我的代码。列是动态添加的,否则它是直接的代码。
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万行,但是当它超过它时抛出异常。我是否需要对代码进行任何更改?
这种情况发生在所有服务器上(dev,prod甚至本地)
答案 0 :(得分:1)
谢谢大家的回复。
我弄清楚问题是什么。首先,它在调用SQL批量复制时没有出现,我认为这可能是因为,在之前的运行中,我能够运行少于当前的1000条记录,所以我认为SQL批量复制有局限性或需要设置才能处理大量记录。当我调试代码时,我发现在调用数据库插入之前有一个方法调用“将对象类型转换为强类型”,这意味着,我有一个动态类对象,我需要将其转换为强类型对象,所以我循环该方法中要转换的所有记录,并在那里失败。但是,这种方法仍然在早期工作,有超过300万条记录。
所以在谷歌搜索之后,我发现罪魁祸首是“32位”平台。应用程序设置为在“任何CPU”中运行,但检查了“首选32位”。当我取消选中时,我能够运行记录并使用SQL批量复制插入数据库!
感谢大家花时间阅读我的帖子!欣赏它!