я был в состоянии сказать GC.Collect избавиться от временного значения в моем foreach. Похоже, что .value фактически поддерживал объект, а не позволял его собирать.

я есть длительный процесс, который должен выполнять множество запросов в 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 Кто-нибудь сталкивался с этим раньше? Есть ли обходные пути?

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

Ответы на вопрос(5)

Ваш ответ на вопрос