我用SqlBulkCopy的插入大約370萬行,並拋出錯誤使用SQL批量複製插入〜370萬行拋出OutOfMemory例外
引發異常的類型「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,督促,甚至地方)
是你正在使用的jackson'ObjectReader'嗎?在例外情況下的調用堆棧是否會泄露與讀取或寫入有關的任何信息?已經有一些類似的問題(如http://stackoverflow.com/q/12819151/1132334),但它們都與數據源的問題有關。 – dlatikay
如果我不得不猜測,我會說這可能是您正在使用的閱讀器的實現中的一個錯誤。你能否在問題中提供更多關於它的細節? –
感謝您的意見,我試圖調試更集中(我沒有做這個問題之前),我看到轉換對象類型時發生錯誤。我試圖將對象類型轉換爲強類型DTO,並在foreach循環中引發內存異常錯誤。我試圖找出一個辦法,會讓你張貼。欣賞你的所有迴應,它給我的大腦一些啓發,也想在南側:) – superachu