@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