关于c#:我可以从DirectorySearcher获得1000多个记录吗?

关于c#:我可以从DirectorySearcher获得1000多个记录吗?

Can I get more than 1000 records from a DirectorySearcher?

我刚刚注意到结果的返回列表限制为1000。我的域(HUGE域)中有1000多个组。如何获得超过1000条记录?我可以从以后的唱片开始吗?我可以将其划分为多个搜索吗?

这是我的查询:

1
2
3
4
DirectoryEntry dirEnt = new DirectoryEntry("LDAP://dhuba1kwtn004");
string[] loadProps = new string[] {"cn","samaccountname","name","distinguishedname" };
DirectorySearcher srch = new DirectorySearcher(dirEnt,"(objectClass=Group)", loadProps);
var results = srch.FindAll();

我尝试设置srch.SizeLimit = 2000 ;,但这似乎不起作用。有什么想法吗?


您需要将DirectorySearcher.PageSize设置为非零值才能获取所有结果。

顺便说一句,您还应该在完成DirectorySearcher后将其处置

1
2
3
4
5
using(var srch = new DirectorySearcher(dirEnt,"(objectClass=Group)", loadProps))
{
    srch.PageSize = 1000;
    var results = srch.FindAll();
}

API文档不是很清楚,但是本质上是:

  • 当您进行分页搜索时,将忽略SizeLimit,并且在您遍历FindAll返回的结果时将返回所有匹配的结果。结果将一次从服务器检索到一页。我选择了1000以上的值,但是如果愿意,可以使用较小的值。折衷方案是:使用较小的PageSize将更快地返回结果的每一页,但在迭代大量结果时将需要更频繁地调用服务器。

  • 默认情况下,不对搜索进行分页(PageSize = 0)。在这种情况下,最多返回SizeLimit结果。

正如Biri所指出的,处置由FindAll返回的SearchResultCollection很重要,否则,如DirectorySearcher.FindAll的MSDN文档的"备注"部分所述,您可能会发生内存泄漏。

在.NET 2.0或更高版本中避免这种情况的一种方法是编写一个自动处理SearchResultCollection的包装方法。这可能类似于以下内容(或可能是.NET 3.5中的扩展方法):

1
2
3
4
5
6
7
8
9
10
public IEnumerable<SearchResult> SafeFindAll(DirectorySearcher searcher)
{
    using(SearchResultCollection results = searcher.FindAll())
    {
        foreach (SearchResult result in results)
        {
            yield return result;        
        }
    } // SearchResultCollection will be disposed here
}

然后可以按以下方式使用它:

1
2
3
4
5
using(var srch = new DirectorySearcher(dirEnt,"(objectClass=Group)", loadProps))
{
    srch.PageSize = 1000;
    var results = SafeFindAll(srch);
}

推荐阅读

    linux运行多个命令?

    linux运行多个命令?,环境,软件,系统,工作,服务,连续,命令,指令,分号,冲突,lin

    linux命令行开多个?

    linux命令行开多个?,系统,情况,命令,首次,名称,名字,连续,首页,时间,软件,Lin

    linux下清除命令记录?

    linux下清除命令记录?,软件,命令,位置,手机,情况,平台,数据,网络,系统,文件,L

    linux清楚命令记录?

    linux清楚命令记录?,系统,数据,命令,名称,不了,信息,位置,文件夹,文件,文件

    linux命令多个选项?

    linux命令多个选项?,系统,工作,基础,信息,命令,工具,数据,不了,名称,环境,Lin

    linux下查看命令记录?

    linux下查看命令记录?,信息,地址,系统,时间,服务,命令,名称,数据,环境,数字,

    linux多个窗口命令?

    linux多个窗口命令?,工具,系统,命令,首页,技术,情况,终端,窗口,脚本,界面,Lin

    linux中有趣的命令?

    linux中有趣的命令?,工作,系统,地址,信息,单位,命令,目录,代码,管理,标准,mv

    linux脚本多个命令?

    linux脚本多个命令?,系统,工作,标准,服务,命令,软件,管理,连续,电脑,设备,lin

    清理linux命令记录?

    清理linux命令记录?,系统,数据,命令,环境,信息,名称,不了,时间,地址,文件夹,

    linux磁盘列表命令?

    linux磁盘列表命令?,情况,管理,系统,单位,信息,数据,命令,磁盘,服务,时间,lin

    linux命令中有问号?

    linux命令中有问号?,不了,系统,数字,权限,问号,文件,中文,乱码,字形,字母,lin

    linux查看命令记录?

    linux查看命令记录?,信息,系统,时间,地址,名称,命令,数据,环境,服务,历史,lin

    linux多个命令输入?

    linux多个命令输入?,系统,工具,工作,命令,电脑,地址,信息,软件,服务,连续,Lin

    linux命令筛选列表?

    linux命令筛选列表?,工具,状态,位置,工作,预期,命令,名称,标准,数据,系统,在L

    linux的长列表命令?

    linux的长列表命令?,工作,系统,信息,命令,数据,目录,电脑,软件,时间,设备,Lin

    linux记录终端命令?

    linux记录终端命令?,系统,信息,工作,地址,命令,名称,服务,首页,第一,管理,lin

    linux导出记录命令?

    linux导出记录命令?,系统,标准,数据,命令,地方,地址,位置,服务,下来,设计,在l

    linux启动多个命令?

    linux启动多个命令?,密码,工作,对比,设备,标准,代理,第一,命令,参数,脚本,重

    linux目录列表命令?

    linux目录列表命令?,系统,信息,标准,工作,命令,地址,时间,数据,名称,目录,lin