我有一个需要频繁在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(),它们将会泄漏内存。我已经尝试了不调用Dispose()的情况,结果会泄漏更多的内存。我使用2.0和4.0框架版本都测试过了。有人遇到过这种情况吗?是否有任何解决方法?
更新:我尝试在另一个AppDomain中运行代码,但似乎也没有帮助。