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