System.DirectoryServices.AccountManagment内存问题中的FindByIdentity

时间:2009-08-20 12:13:35

标签: active-directory directoryservices

我正在开发一个活跃的目录管理应用程序。除了典型的创建新用户,启用/禁用帐户,重置我的密码等,它还管理所有客户端Web应用程序的应用程序权限。应用程序管理由数千个AD组处理,例如,应用程序,部分和站点的3个字母代码构建,还有数百个AD组,用于确定协调员可以授予哪些应用程序和位置。所有这些组又属于其他组,因此我通常使用MemberOf属性过滤组列表以查找用户直接属于的组(或者每个人都有权执行所有操作)。我在整个应用程序的31个位置使用FindByIdentity方法广泛使用了System.DirectoryServices.AccountManagment命名空间。此方法在内部ADStoreCtx类上调用私有方法FindPrincipalByIdentRefHelper。 SearchResultCollection已创建但未配置,因此最终通常每天一次或两次Web服务器内存不足,并且Web服务器上的所有应用程序都会停止响应,直到重置iis,因为com对象使用的资源不会被重置

有些地方我会回到底层目录对象,但是我在很多地方使用Principal上的属性 - 这比使用.Net 2.0目录中的深奥广告属性名称有了很大的改进服务代码。

我已经联系过微软关于这个问题,它已经在.Net 4.0中得到了修复,但他们目前没有计划在3.5中修复它,除非社区对它有兴趣。

我只在几个地方找到了有关它的信息

社区内容状态中的MDSN文档底部有内存泄漏(猜测我应该在使用该方法之前阅读)

http://msdn.microsoft.com/en-us/library/bb345628.aspx

有问题的类是内部的,并且不会在违规方法之外暴露SearchResultsCollection,所以我无法得到结果来处理它们或从类继承并覆盖该方法。

所以我的问题是

还有其他人遇到过这个问题吗?如果是这样,你能解决它吗?

除了重写不使用任何.Net 3.5活动目录代码的应用程序外,我还有其他选择吗?

由于

2 个答案:

答案 0 :(得分:0)

我遇到了同样的错误,不,我没有使用DirectoryEntry方法以外的解决方法。

答案 1 :(得分:0)

将您对directorysearcher的调用包含在using块中,并将resultcollection包装在using块中,并在结果上显式调用.Dispose()。见这里的答案:

Memory Leak when using PrincipalSearcher.FindAll()