![](/img/trans.png)
[英]Memory leaks when using DirectoryServices.AccountManagement
[英]DirectoryServices.AccountManagement - group membership checking efficiency
我们在Active Directory中有一个群组,拥有超过7万个用户帐户。 我需要检查是否有人是该组的成员。 该代码将在具有大量并发用户的Web应用程序中运行。 如果可能,我希望坚持使用System.DirectoryServices.AccountManagement来减少为此应用程序编写的代码量。
似乎有2种一般方法可以检查某人是否为会员:
我想避免列举70k用户来检查某人是否在组中,因此选项2的面值似乎更有效。 当我开始工作时,可以针对这两种方法进行一些测试,但是我想获得一些有关这些方法在幕后真正作用的信息。 我的思考方向是否正确?
关于我正在使用的库的最后一点。 如果完全退出System.DirectoryServices.AccountManagement并编写自己的LDAP查询,是否可以获得更好的性能?
嗯,您可能要考虑使事情更有效率的一件事是基于这样的事实,即组成员身份实际上是由具有其成员用户(和组)列表的组管理的。 用户上的“ memberOf”实际上是计算得出的“反向链接”-有关更多信息,请参见这篇出色的文章 。
因此,如果您需要检查一个或两个组中的成员资格,那么走到那些组并询问他们的成员列表并缓存它们可能要容易得多。 在评估用户时,您只需检查其DN是否显示在组成员列表之一中,而不必一遍又一遍地敲击AD。
您将执行以下操作:
GroupPrincipal myGroup = Group.FindByIdentity(context, "myGroupName");
var members = myGroup.GetMembers();
这样,由于组成员身份信息的缓存,您应该能够获得更好的性能。 试试吧!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.