【发布时间】: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