2

我正在开发一个活动目录管理应用程序。除了典型的创建新用户、启用/禁用帐户、重置我的密码等之外,它还管理所有客户端 Web 应用程序的应用程序权限。应用程序管理由数千个 AD 组处理,例如由应用程序、部分和站点的 3 个字母代码构建而成,还有数百个 AD 组确定协调员可以授予哪些应用程序和位置的权限。所有这些组又属于其他组,因此我通常使用 MemberOf 属性过滤组列表,以查找用户直接所属的组(或者每个人都有权做任何事情)。我已经广泛使用了 System.DirectoryServices。在整个应用程序的 31 个位置使用 FindByIdentity 方法的 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 活动目录代码重写应用程序之外,我还有其他选择吗?

谢谢

4

2 回答 2

0

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

于 2009-09-03T19:25:05.420 回答
0

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

使用 PrincipalSearcher.FindAll() 时的内存泄漏

于 2012-06-22T18:46:44.817 回答