【问题标题】:directorysearcher pagesize confusion目录搜索器页面大小混乱
【发布时间】:2014-11-02 22:27:54
【问题描述】:

我一直在查看 Microsoft 的文档以及此处有关从 DirectorySearcher 获取搜索结果的帖子。我正在编写代码,不确定从 AD 中获得大量结果的最佳执行方式(现在使用 4K 结果进行测试,但应该可以扩展更多)。

问题1:最好的方法是什么?

这是我迄今为止所做的努力。

运行 1 描述 我没有设置返回 2000 的 PageSize(这似乎是 AD 服务器上的默认值 - 不是我从帖子/文档中读取的 1000)。我不知道如何获得剩余的结果。我尝试多次拨打Dispose(),然后拨打FindAll()。那没有用(一遍又一遍地给我同样的结果)。

问题 2:如何以这种方式获得所有结果?

运行 1:

//ds.PageSize - not setting this property
log.Debug("PageSize=" + ds.PageSize);
log.Debug("SizeLimit=" + ds.SizeLimit);
results = ds.FindAll();
log.Debug("AD count: " + results.Count);

运行 1 条日志

PageSize=0
SizeLimit=0
AD Count: 2000

运行2说明 我将 PageSize 设置为高于我的结果(尽管出于对性能的担忧,我真的不想这样做)。我得到了预期的所有结果。

运行 2:

ds.PageSize = 5000;
log.Debug("PageSize=" + ds.PageSize);
log.Debug("SizeLimit=" + ds.SizeLimit);
results = ds.FindAll();
log.Debug("AD count: " + results.Count);

运行 2 日志

PageSize=5000
SizeLimit=0
AD Count: 4066

运行3说明 我将 PageSize 设置为低于我的结果,以免影响性能,将其设置为可能会允许通过调用 Dispose()FindAll() 对结果进行“分页”。完全得到了意想不到的结果!

运行 3:

ds.PageSize = 2000;
log.Debug("PageSize=" + ds.PageSize);
log.Debug("SizeLimit=" + ds.SizeLimit);
results = ds.FindAll();
log.Debug("AD count: " + results.Count);

运行 3 日志:

PageSize=2000
SizeLimit=0
AD Count: 4066

问题 3: 这对我来说毫无意义。请指出我正确的方向。我认为随后对Dispose()FindAll() 的调用将在这里工作。但我第一次就得到了所有的结果。

谢谢一百万!

【问题讨论】:

    标签: c# active-directory .net-4.5


    【解决方案1】:

    您的环境中的值可能已更改 - 默认为 1000。您可以将页面大小设置为 1000,DirectorySearcher 类将为您处理分页。如果你把它设置得更小,那也没关系。您应该将代码包装在 using 块中,以确保资源得到处理。

    【讨论】:

    • 我已经阅读了处理分页的 DirectorySearcher 类,但不确定这意味着什么。在上面的运行 1 中,我无法弄清楚如何获得其余的搜索结果(我假设是 4066,但只有 2000)。
    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    相关资源
    最近更新 更多