我遇到了以下代码中发生的严重内存泄漏:
public void BulkInsert(string tableName, IDataReader reader, String connectionString)
{
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
using (var bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.DestinationTableName = tableName;
bulkCopy.BulkCopyTimeout = 900;
try
{
bulkCopy.WriteToServer(reader);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
reader.Close();
}
}
}
}
此代码段执行数千次,因此只需一分钟即可发生内存不足异常。Ants 报告这是因为 IDataReader 指向的行没有被 GC 收集。但是,当我注释掉以下行时,没有泄漏,这就是我将问题隔离到这段代码的方式。
bulkCopy.WriteToServer(reader);
有没有人建议如何防止内存泄漏?
先感谢您。
调用代码:
var reader = datatable.CreateDataReader();
BulkInsert(tablename, reader, connectionString);
reader.Dispose();
datatable.Dispose();