2009-07-16 4 views
2

Lorsque vous utilisez le DirectorySearcher dans .net, ces deux instructions sont-elles égales?est DirectorySearcher.SizeLimit = 1 pour FindAll() égal à FindOne() [DirectoryServices/.net]

même pour les deux:

Dim ds As New DirectorySearcher 
' code to setup the searcher 

Première déclaration

ds.FindOne() 

déclaration Deuxième

ds.SizeLimit = 1 
ds.FindAll() 

... sauf évidemment que FindOne() retourne un objet SearchResult et FindAll() retourne un objet SearchResultCollection

Répondre

5

Oui, ce serait presque la même chose. Presque, parce que dans .NET 2.0 (pas sûr si elle a été corrigée dans des versions plus récentes), l'appel .FindOne() a eu quelques problèmes avec une fuite de mémoire, donc la meilleure pratique est (ou était) de toujours utiliser .FindAll() et passez en revue vos résultats.

Marc

4

@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; 
    } 
} 
+0

Merci pour cette info ... très précieux! – davidsleeps

Questions connexes