我一直在查看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()
的调用会在这里起作用。但我先得到了所有的结果。
万分感谢!
答案 0 :(得分:0)
您的环境中的值可能已更改 - 默认情况下为1000。您可以将Page Size设置为1000,DirectorySearcher
类将为您处理分页。如果你把它设置得更小,这也很好。您应该将代码包装在using
块中,以确保资源处理完毕。