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