3
我想使用odp.net的OracleBulkCopy類將數據從Microsoft Sql Server數據庫複製到Oracle數據庫。我有一個大約2M行和100列的桌子。我有內存分配問題。下面的代碼似乎是分配內存,永遠不會釋放,直到它得到一個不能分配內存異常。使用odp.net批量複製c#
我使用了一個非常相似的代碼,使用System.Data.SqlClient.SqlBulkCopy函數將數據從Oracle傳輸到MSSQL服務器,並且從來沒有遇到過這種問題。
using (SqlConnection sourceConnection =
new SqlConnection(sourceConn))
{
sourceConnection.Open();
SqlCommand commandSourceData = new SqlCommand(
sourceSQL, sourceConnection);
commandSourceData.CommandTimeout = 1000000;
using (OracleConnection destinationConnection =
new OracleConnection(connStr))
{
destinationConnection.Open();
using (OracleBulkCopy bulkCopy =
new OracleBulkCopy(destinationConnection))
{
bulkCopy.DestinationTableName = destinationTable;
bulkCopy.BatchSize = 10000;
bulkCopy.BulkCopyTimeout = 10000;
bulkCopy.WriteToServer(commandSourceData.ExecuteReader(CommandBehavior.SequentialAccess));
}
}
}
當我檢查了內存分配這兩個功能好像是用大部分的內存:
-System.Data.SqlClient.SqlDataReader.GetValue(INT32)(70%) -Oracle。 DataAccess.Types.DecimalConv.GetBytes(value類型System.Decimal,本地int)(20%)
有沒有人有任何關於問題的原因的想法?
謝謝。
當您通過託管堆提取整個數據庫時,預計會有大量的分配。找出什麼是*持有*內存活着。根源是什麼?讓我們希望這不是Oracle代碼,因爲那樣你運氣不好。 – usr
你爲什麼使用.NET sql客戶端?你有沒有考慮過純粹使用Oracle適配器? – Ramie