@marc_s是正確的,所不同的是FindOne內存泄漏錯誤已在.NET 1.x和被固定在.NET 2.0。
它的發生是因爲FindOne的.NET 1.x的實施在幕後調用的FindAll並不總是處置findAll返回的SearchResultCollection:
public SearchResult FindOne()
{
SearchResultCollection collection1 = this.FindAll(false);
foreach (SearchResult result1 in collection1)
{
collection1.Dispose();
return result1;
}
return null;
}
在上面的代碼collection1.Dispose不會被調用如果該集合爲空(未找到結果),則會導致內存泄漏,如the MSDN documentation for FindAll的備註部分所述。
您可以在.NET 2.0中安全地使用FindOne。或者,如果你使用的FindAll,你需要確保你處置返回SearchResultCollection或者您將具有相同的內存泄漏,例如:
public SearchResult MyFindOne()
{
using(SearchResultCollection results = this.FindAll(false))
{
if(results.Count > 0) return results[0];
return null;
}
}
來源
2009-07-16 06:18:19
Joe
感謝額外的信息...非常有價值! – davidsleeps 2009-07-16 10:30:07