C# 性能:DirectorySearcher vs.PrincipalSearcher vs。。。?
我对C#没有那么丰富的经验,但我写起来很舒服 我正在使用C# 性能:DirectorySearcher vs.PrincipalSearcher vs。。。?,c#,.net,performance,active-directory,directoryservices,C#,.net,Performance,Active Directory,Directoryservices,我对C#没有那么丰富的经验,但我写起来很舒服 我正在使用System.DirectoryServices.DirectorySearcher和System.DirectoryServices.AccountManagement.PrincipalSearcher进行一些基本的ActiveDirectory查找。我尝试的练习是递归地获取给定组中的组,即: static void Main(){ DirectorySearcher ds = new DirectorySearcher(
System.DirectoryServices.DirectorySearcher
和System.DirectoryServices.AccountManagement.PrincipalSearcher
进行一些基本的ActiveDirectory查找。我尝试的练习是递归地获取给定组中的组,即:
static void Main(){
DirectorySearcher ds = new DirectorySearcher(
new DirectoryEntry("LDAP://region.company.com"));
ds.Filter = "(&(objectCategory=group)(cn=" + myGroupName + "))";
ds.PropertiesToLoad.Add("member");
ds.PropertiesToLoad.Add("distinguishedname");
SearchResult r = ds.FindOne();
getNestedGroups(ref ds, r.Properties["member"]);
}
private void getNestedGroups(ref DirectorySearcher ds, ResultPropertyValueCollection member){
foreach (string s in member) {
ds.Filter = "(&(objectCategory=group)(distinguishedname=" + s + "))";
SearchResult r = ds.FindOne();//if we find something, s is a group, so go inside it
if (r != null) {
Console.WriteLine(r.GetDirectoryEntry().Properties["distinguishedname"].ToString());
getNestedGroups(ref ds, r.Properties["member"]);
}
}
}
我正在使用的示例是一个总共有6个嵌套组(3个深度)的组,我意识到代码可能涉及150个非组的“成员”。。这是“会员”财产的性质,但其速度之慢令人无法忍受。。大约需要20秒。这比在VBA或VBScript中使用ADO执行相同的操作要慢得多(约1秒)
我意识到可能有更好的LDAP查询,但我想知道每个组的嵌套深度
我还使用PrincipalSearcher
尝试了类似的方法,但性能同样糟糕
我甚至尝试在运行时确定一个DomainController
,并在连接时指定它(而不是在我的示例中的无服务器连接),但性能还是一样的。我还意识到我没有指定搜索根或类似的东西,但我给它的信息与我给ADO的信息完全相同。我还尝试了PageSize
和CacheResults
等,但都没有用
我看到了一些来自底层COM对象的异常。。这些库只是古代COM DLL之上的层吗?还是我在做傻事