C# DirectorySearch.PageSize=2不';行不通

C# DirectorySearch.PageSize=2不';行不通,c#,active-directory,C#,Active Directory,计数=3(三)而不是2。为什么呢?我不想把所有的结果都放在一页纸上。我知道PageSize=2很小,但我在本例中设置该值只是为了测试(实际上它会更大)。PageSize是设置在一次分页搜索中返回的记录数。分页搜索是LDAP协议级别的基础内容。这对你来说是透明的。尽管您将PageSize设置为2,DirectorySearcher将为您返回所有结果,但在您的情况下,将以两个分页搜索回复数据包的形式返回 要做您想做的事情,您应该使用SizeLimit。它将控制返回的记录总数 这里还有一件棘手的事情。

计数=3(三)而不是2。为什么呢?我不想把所有的结果都放在一页纸上。我知道PageSize=2很小,但我在本例中设置该值只是为了测试(实际上它会更大)。

PageSize是设置在一次分页搜索中返回的记录数。分页搜索是LDAP协议级别的基础内容。这对你来说是透明的。尽管您将PageSize设置为2,DirectorySearcher将为您返回所有结果,但在您的情况下,将以两个分页搜索回复数据包的形式返回

要做您想做的事情,您应该使用SizeLimit。它将控制返回的记录总数

这里还有一件棘手的事情。Windows Server在服务器端设置了限制。在每个分页搜索结果中,它最多只能返回1000个条目。因此,如果结果超过1000个条目,则需要小心设置PageSize和SizeLimit。如果将PageSize=0(表示无限制)和SizeLimit=0(表示无限制),则会出现错误,因为Windows server无法在一个页面中返回超过1000个条目。如果设置Pagesize=800和SizeLimit=0(表示无限制),您将获得所有结果,如果查看网络嗅探器,您将看到大量LDAP分页搜索结果。在每个分页的搜索结果中,您会看到800个条目

编辑

下面是对你评论中问题的一个更为详细的回答


嗯,很有趣。请帮帮我 更好地理解这一机制:如果 在广告中,我有5000行,页面大小为 DirectorySearcher设置为1000, SizeLimit设置为0,最大服务器 上限是1000。有多少个电话 directorySearcher.FindAll()我需要 我的密码里有5000个 结果?5或1


无论返回多少条记录,您始终只需调用DirectorySearcher一次。DirectorySearcher将为您处理其余部分。它将聚合分页搜索结果,并在一个IEnumerable中呈现给您,即使数据可能来自不同的回复数据包。我猜你想设置PageLimit,因为你不想一次返回所有5000个结果并占用你的内存。别担心。DirectorySearcher不会将所有5000个结果存储在内存中,只要您不保留对每个返回的SearchResult的引用。它也不会等到所有的回复包都回来。第一个回复数据包返回后,FindAll()立即将结果返回给您。如果您的程序速度太快,以至于在处理完1000个结果后,第二个分页的搜索结果包仍然没有到达。对MoveNext()的调用将被阻止,并等待收到第二个分页的搜索结果数据包。

看看这段代码和Ethan Wilansky的相关文章


做你想做的事。

嗯,很有趣。请帮助我更好地理解这个机制:如果在广告中我有5000行,DirectorySearcher的PageSize设置为1000,SizeLimit设置为0,最大服务器限制为1000。我需要在代码中调用多少directorySearcher.FindAll()才能获得全部5000个结果?5或1?@Bero我评论中的文本数量有限。我更新我的答案。希望这能帮助你了解更多这真的很有帮助。谢谢。:)请解释,链接粘贴是不够的,请扩展您的答案,包括链接页面的相关代码。
     using (DirectorySearcher srch = new DirectorySearcher(String.Format("(memberOf=  {0})",p_Target.DistinguishedName)))
     {
            srch.PageSize = 2;
            SearchResultCollection results = results = srch.FindAll();
            int count = results.Count;
     }