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