@marc_s est juste, sauf que le bogue de fuite de mémoire FindOne était dans 1.x et .NET est fixé dans .NET 2.0.
Il est arrivé parce que la mise en œuvre de 1.x .NET des appels FindOne FindAll sous les couvertures et ne dispose pas toujours le SearchResultCollection retourné par FindAll:
public SearchResult FindOne()
{
SearchResultCollection collection1 = this.FindAll(false);
foreach (SearchResult result1 in collection1)
{
collection1.Dispose();
return result1;
}
return null;
}
Dans le collection1.Dispose de code ci-dessus ne sera pas appelé si la collection est vide (aucun résultat trouvé), entraînant une fuite de mémoire comme décrit dans la section des remarques de the MSDN documentation for FindAll.
Vous pouvez utiliser FindOne en toute sécurité dans .NET 2.0. Ou si vous utilisez FindAll, vous devez vous assurer que vous disposez du SearchResultCollection retourné ou vous aurez la même fuite de mémoire, .:
par exemple
public SearchResult MyFindOne()
{
using(SearchResultCollection results = this.FindAll(false))
{
if(results.Count > 0) return results[0];
return null;
}
}
Merci pour cette info ... très précieux! – davidsleeps