gpt4 book ai didi

.net - System.DirectoryServices.AccountManagement 性能问题?

转载 作者:行者123 更新时间:2023-12-02 03:23:43 24 4
gpt4 key购买 nike

以下 C# 代码 (.NET Framework 3.5) 返回 AD 组“xyz”的所有用户的名称和描述。只要它返回一些记录,它就可以很好地工作。但是,当它返回超过 100 条记录时,它会非常慢。任何建议将不胜感激。预先感谢您!

var context = new PrincipalContext(ContextType.Domain);

var grp = GroupPrincipal.FindByIdentity(context, "xyz");

var users = grp.GetMembers(true);

var usersList = users.Select(n => new { UserName = n.Name,
Description = n.Description })
.OrderBy(o => o.UserName.ToString());

Console.WriteLine(usersList.ToList());

最佳答案

执行属性范围查询 (ASQ) 时,您将获得更好的性能。这是一些示例代码:

DirectoryEntry group = new DirectoryEntry("LDAP://CN=All Staff,OU=Groups,DC=domain,DC=local");

DirectorySearcher searcher = new DirectorySearcher();
searcher.SearchRoot = group;
searcher.Filter =
"(&(objectClass=user)(objectCategory=person)(mail=*))";
searcher.PropertiesToLoad.Add("mail");
searcher.SearchScope = SearchScope.Base;

searcher.AttributeScopeQuery = "member";

List<string> mail;
using (SearchResultCollection results = searcher.FindAll())
{
mail = new List<string>();
foreach (SearchResult result in results)
{
mail.Add(result.Properties["mail"][0].ToString());
}
}

一般来说,System.DirectoryServices.AccountManagement 的性能会比 System.DirectoryServices 慢。然而 99% 的时间你都无法注意到它。然而,在本例中,您的示例是迭代每个对象并将其拉过网络,而我的示例是利用 LDAP 代表我们完成所有工作。

请注意,此代码仅适用于成员少于 1000 人的群组。如果您的组比这个大,您将需要分页,这是更复杂的代码,但没什么大不了的。

关于.net - System.DirectoryServices.AccountManagement 性能问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2263834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com