我刚刚注意到结果的返回列表被限制为1000个。我在我的域(巨大的域)中有1000多个组。怎样才能得到1000条以上的记录?我可以从以后的记录开始吗?我能把它分成多个搜索吗?
下面是我的问题:
DirectoryEntry dirEnt = new DirectoryEntry("LDAP://dhuba1kwtn004");
string[] loadProps = new string[] { "cn", "samaccountname", "name", "distinguishedname" };
DirectorySearcher srch = new DirectorySearcher(dirEnt, "(objectClass=Group)", loadProps);
var results = srch.FindAll();
我曾尝试设置srch.SizeLimit = 2000;,但似乎不起作用。有什么想法吗?
发布于 2008-09-18 07:15:45
您需要将DirectorySearcher.PageSize设置为非零值才能获得所有结果。
顺便说一句,您还应该在使用完DirectorySearcher后将其处理掉
using(var srch = new DirectorySearcher(dirEnt, "(objectClass=Group)", loadProps))
{
srch.PageSize = 1000;
var results = srch.FindAll();
}
API文档不是很清楚,但本质上是:
正如Biri指出的,处理FindAll返回的SearchResultCollection非常重要,否则可能会导致as described in the Remarks section of the MSDN documentation for DirectorySearcher.FindAll内存泄漏。
在.NET 2.0或更高版本中,避免这种情况的一种方法是编写一个自动处理SearchResultCollection的包装器方法。这可能类似于以下内容(或者可能是.NET 3.5中的扩展方法):
public IEnumerable<SearchResult> SafeFindAll(DirectorySearcher searcher)
{
using(SearchResultCollection results = searcher.FindAll())
{
foreach (SearchResult result in results)
{
yield return result;
}
} // SearchResultCollection will be disposed here
}
然后,您可以按如下方式使用它:
using(var srch = new DirectorySearcher(dirEnt, "(objectClass=Group)", loadProps))
{
srch.PageSize = 1000;
var results = SafeFindAll(srch);
}
发布于 2021-09-02 11:50:57
我试图使用给定的解决方案来实现分页,但它不起作用。我设置了pageSize = 100;并且我通过searchResult获得了所有的项目。
(objectClass=user)(objectClass=printQueue)(objectClass=computer). (objectClass=organizationalUnit)(objectClass=Group))");= dirSearcher =新条目(目录);dirSearcher= ("(|(objectClass=volume). (objectClass=user)(objectClass=printQueue)(objectClass=computer).(objectClass=organizationalUnit)(objectClass=Group))“);
dirSearcher.PageSize = 100;
dirSearcher.SearchScope = System.DirectoryServices.SearchScope.Subtree;
dirSearcher.ServerTimeLimit = new TimeSpan(1000);
//dirSearcher.VirtualListView = new DirectoryVirtualListView(0, 100, 1);
using (SearchResultCollection results = dirSearcher.FindAll())
{
foreach (SearchResult result in results)
{
DirectoryEntry ent = result.GetDirectoryEntry();
ADItem ProviderItem = Context.ConvertToItem(ent, true);
if (ProviderItem != null)
{
ProviderItem.IsPartialData = true;
ProviderItems.Add(ProviderItem);
}
}
}
}
https://stackoverflow.com/questions/90652
复制相似问题