@ marc_s прав, за исключением того, что ошибка утечки памяти FindOne была в .NET 1.x и исправлена в .NET 2.0.
Это произошло потому, что реализация .NET 1.x FindOne вызывает FindAll под прикрытием и не всегда располагает коллекцией SearchResultCollection, возвращаемой FindAll:
public SearchResult FindOne()
{
SearchResultCollection collection1 = this.FindAll(false);
foreach (SearchResult result1 in collection1)
{
collection1.Dispose();
return result1;
}
return null;
}
В приведенном выше коде collection1. Dispose не будет вызываться, если коллекция пуста (результат не найден), что приводит к утечке памяти, как описано в разделе примечаний документации MSDN для FindAll .
Вы можете безопасно использовать FindOne в .NET 2.0. Или, если вы используете FindAll, вам нужно убедиться, что вы удалили возвращенную SearchResultCollection, или у вас будет та же утечка памяти, например ::
public SearchResult MyFindOne()
{
using(SearchResultCollection results = this.FindAll(false))
{
if(results.Count > 0) return results[0];
return null;
}
}