directorysearcher pagesize混乱

时间:2014-09-09 13:17:05

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

我一直在查看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()的调用会在这里起作用。但我先得到了所有的结果。

万分感谢!

1 个答案:

答案 0 :(得分:0)

您的环境中的值可能已更改 - 默认情况下为1000。您可以将Page Size设置为1000,DirectorySearcher类将为您处理分页。如果你把它设置得更小,这也很好。您应该将代码包装在using块中,以确保资源处理完毕。