首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB.NET DirectorySearcher分页

VB.NET DirectorySearcher分页
EN

Stack Overflow用户
提问于 2012-12-18 00:04:32
回答 1查看 1.7K关注 0票数 1

我一直在想办法弄清楚有多少页被搜索过,这样我就可以多线程搜索了

例如,假设Active Directory有5000台计算机。Active Directory每次查询将仅返回1000台计算机。下面的代码将返回5页1000个结果。我如何计算出DirectorySearcher需要做多少页才能得到所有的结果?

谢谢

代码语言:javascript
复制
Dim Searcher As DirectorySearcher = New DirectorySearcher("(objectClass=computer)")
Searcher.PageSize = Integer.MaxValue
Searcher.SizeLimit = Integer.MaxValue
Dim Result As SearchResultCollection = Searcher.FindAll()
For Each i As SearchResult In Result
//some code
Next
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-18 11:22:45

我不建议尝试对LDAP查询进行多线程处理。各个搜索是独立的。假设您有两个线程,第一个线程请求第一个2500,第二个线程获取其余的。请注意,如果第一个线程使其进行查询,并且其中一台计算机在第二个线程进行查询之前被删除,将会发生什么情况。第251台计算机刚刚超出第一线程的范围,然后又超出了第二个线程的范围。在您的查询中找不到此计算机。

我将假设您想要多线程,因为FindAll方法花费的时间太长了。通过将PageSize设置为Integer.MaxValue,可以强制DC在向您发送结果之前处理整个查询。如果希望FindAll返回得更快,请设置较小的页面大小。只要您设置了页面大小,DirectorySearcher就会抽象出它必须向服务器请求更多结果的事实(否则它只返回前1000个结果)。另一件要看的事情是prior to Server 2008, the objectClass attribute wasn't indexed

最后,如果您确实希望在多个线程之间分发页面,请使用System.DirectoryServices.Protocols namespace。它比System.DirectoryServices的级别更低,所以你可以做像asynchronous searches and ask for the pages yourself这样的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13917638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档