Утечка памяти при использовании DirectorySearcher.FindAll ()

У меня есть длительный процесс, который довольно часто должен выполнять множество запросов в Active Directory. Для этой цели я использовал пространство имен System.DirectoryServices, с помощью классов DirectorySearcher и DirectoryEntry. Заметил утечку памяти в приложении.

Это можно воспроизвести с помощью следующего кода:

while (true)
{
    using (var de = new DirectoryEntry("LDAP://hostname", "user", "pass"))
    {
        using (var mySearcher = new DirectorySearcher(de))
        {
            mySearcher.Filter = "(objectClass=domain)";
            using (SearchResultCollection src = mySearcher.FindAll())
            {
            }            
         }
    }
}

В документации для этих классов говорится, что они будут вызывать утечку памяти, если Dispose () не вызывается. Я также пробовал без утилизации, в этом случае происходит утечка больше памяти. Я тестировал это с обеими версиями фреймворка 2.0 и 4.0. Кто-нибудь сталкивался с этим раньше? Есть ли какие-нибудь обходные пути?

Обновление: я пробовал запустить код в другом домене приложений, но это тоже не помогло.

25
задан Can Gencer 23 May 2011 в 13:45
поделиться