Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Active directory System.DirectoryServices.AccountManagement内存问题中的FindByIdentity_Active Directory_Directoryservices - Fatal编程技术网

Active directory System.DirectoryServices.AccountManagement内存问题中的FindByIdentity

Active directory System.DirectoryServices.AccountManagement内存问题中的FindByIdentity,active-directory,directoryservices,Active Directory,Directoryservices,我正在开发一个active directory管理应用程序。除了典型的创建新用户、启用/禁用帐户、重置密码等操作外,它还管理所有客户端web应用程序的应用程序权限。应用程序管理由数千个广告组处理,这些广告组由应用程序、分区和站点的3个字母代码构建,还有数百个广告组决定协调员可以授予哪些应用程序和位置权限。所有这些组都属于其他组,因此我通常使用MemberOf属性过滤组列表,以查找用户直接属于的组(或者每个人都有权做任何事情)。在整个应用程序中,我使用FindByIdentity方法在31个位置广

我正在开发一个active directory管理应用程序。除了典型的创建新用户、启用/禁用帐户、重置密码等操作外,它还管理所有客户端web应用程序的应用程序权限。应用程序管理由数千个广告组处理,这些广告组由应用程序、分区和站点的3个字母代码构建,还有数百个广告组决定协调员可以授予哪些应用程序和位置权限。所有这些组都属于其他组,因此我通常使用MemberOf属性过滤组列表,以查找用户直接属于的组(或者每个人都有权做任何事情)。在整个应用程序中,我使用FindByIdentity方法在31个位置广泛使用了System.DirectoryServices.AccountManagement命名空间。此方法调用内部ADStoreTX类上的私有方法FindPrincipalByIdentitRefHelper。SearchResultCollection已创建但未被释放,因此通常每天会有一到两次web服务器内存耗尽,web服务器上的所有应用程序都会停止响应,直到iis被重置,因为com对象使用的资源从未被释放

在某些地方,我回到了底层目录对象,但在很多地方,我使用了主体上的属性——这比在.Net 2.0目录服务代码中使用深奥的ad属性名称有了很大的改进

我已经就这个问题联系了微软,它已经在.NET4.0中修复了,但是他们目前没有计划在3.5中修复它,除非社区对此感兴趣

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

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

并且所讨论的类是内部的,并且不会在有问题的方法之外公开SearchResultsCollection,因此我无法获取结果来处理它们或从类继承并重写该方法

所以我的问题是

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

除了不使用任何.Net 3.5 active directory代码重写应用程序外,我还有其他选择吗


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

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

将对directorysearcher的调用包装在using块中,并将resultcollection包装在using块中,并显式地对结果调用.Dispose()。请参见此处的答案:


将对directorysearcher的调用包装在using块内,并将resultcollection包装在using块内,并显式调用结果上的.Dispose()。请参见此处的答案: