Active Directoryで多くのクエリを頻繁に実行する必要がある、実行時間の長いプロセスがあります。この目的のために、DirectorySearcherクラスとDirectoryEntryクラスを使用してSystem.DirectoryServices名前空間を使用しています。アプリケーションのメモリリークに気づきました。
このコードで再現できます:
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でコードを実行しようとしましたが、どちらも役に立たなかったようです。