est DirectorySearcher.SizeLimit = 1 pour FindAll () égale à FindOne () [DirectoryServices / .net]

StackOverflow https://stackoverflow.com/questions/1135013

Question

Lorsque vous utilisez le DirectorySearcher en .net, sont ces deux déclarations sont égaux?

Même chose pour les deux:

Dim ds As New DirectorySearcher
' code to setup the searcher

Première déclaration

ds.FindOne()

Deuxième déclaration

ds.SizeLimit = 1
ds.FindAll()

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

Était-ce utile?

La solution

Oui, ce serait presque le même.

Presque, parce que dans .NET 2.0 (pas sûr si elle a été corrigé dans les versions plus récentes), le .FindOne () a eu quelques problèmes avec fuite de mémoire, de sorte que les meilleures pratiques est (ou était) toujours utiliser .FindAll ( ) et itérer sur vos résultats.

Marc

Autres conseils

@marc_s est droit, sauf que le virus de la fuite de mémoire FindOne était dans 1.x .NET et 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 jetez 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é est), ce qui entraîne une fuite de mémoire comme décrit dans la section des remarques la documentation MSDN FindAll.

Vous pouvez utiliser FindOne en toute sécurité dans .NET 2.0. Ou si vous utilisez FindAll, vous devez vous assurer que vous jetez le 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;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top