导演弓箭手页面大小的混乱

本文关键字:混乱 弓箭手 导演 | 更新日期: 2023-09-27 18:21:08

我一直在查看微软的文档和这里关于从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()的调用会在这里工作。但我第一次就得到了所有的结果。

万分感谢!

导演弓箭手页面大小的混乱

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