我使用ODP.Net版本11.1.0插入數據到數據庫中,我看到內存泄漏。如果我註釋掉下面的代碼,它就會消失。這段代碼在我的應用程序中被稱爲數千次,並且我可以看到所有堆中的字節數隨着它的運行而穩步增長。 cmdStr包含一個插入到375列的表中的插入語句。除了兩個字段外,這些字段都是NUMBER - 一個是DATE,另一個是VARCHAR2(20)。有什麼我需要做的清理OracleCommand?這裏沒有引發異常 - 插入命令每次都成功。內存泄漏與OracleCommand
編輯:我試着移動return語句,並沒有按預期的效果 - 使用實際上是一個try-finally塊。
更新:我使用CLRProfiler來查看內存的使用情況,它是一堆字符串對象,約2800個字符串對象。它們的引用由Oracle數據訪問.Client.ConnDataPool對象擁有的HashTable對象持有。 ODP.NET爲什麼要保持這些?
try
{
using (OracleCommand cmd = new OracleCommand(cmdStr, conn))
{
cmd.CommandTimeout = txTimeout;
int nRowsAffected = cmd.ExecuteNonQuery();
errMsg = null;
return EndpointResult.Success;
}
}
catch (OracleException e)
{
return BFOracleAdapter.HandleOracleException(e, out errMsg);
}
catch (Exception e)
{
errMsg = "OracleInsertOperation Exception: " + e.Message;
return EndpointResult.Error;
}
在此代碼中一切看起來不錯。問題:1.您是否正確地部署了OracleConnection對象? 2. CLRProfiler中可以看到什麼字符串? 作爲一種破解,我認爲有一種方法可以關閉/重置連接池中的所有連接... – ConsultUtah 2009-02-20 21:30:56