2009-09-04 71 views
1

我有一个从用户的SID加载用户的Active Directory DirectoryEntry对象下面的代码:什么是加载用户的DirectoryEntry最有效的方法?

public static DirectoryEntry GetUserDirectoryEntry(SecurityIdentifier sid) 
{ 
    return new DirectoryEntry(string.Format("LDAP://<SID={0}>", sid.Value)); 
} 

有没有更有效的方式来做到这一点?由于性能问题,我不得不优化我的代码,我需要压缩到绝对最快的代码。它不一定需要从SID加载。我只需要知道获取用户DirectoryEntry的最有效方法。

编辑:我被限制使用.net 2.0。

回答

1

我不认为它使一个很大的区别,你如何加载您的DirectoryEntry - 通过SID或完全合格的DN是否 - 它只是需要设定的时间量为AD绑定操作工作

那当你实例化DirectoryEntry时,绑定实际上不会发生 - 它会被延迟,直到你开始使用DirectoryEntry的属性,或者访问.NativeObject属性。

因此,无论您使用哪种方式 - 根据某个唯一标识值创建DirectoryEntry只需要花时间。

马克

1

您应该尝试定义更多过滤器并将用户指定为标准中的类型。

+0

我不是做搜索。你是否说使用目录搜索器类会更高效? – 2009-09-04 19:20:26

+0

通过搜索我的意思是你正在使用LDAP查询(搜索AD)。您运行的每个LDAP查询都算作搜索。 – 2009-09-04 19:41:45

2

无论您用于访问目录中的对象的方式如何,目录操作都相当缓慢。没有更多的上下文,很难推荐更高效的方法,但总的来说,您是否考虑过一次抓取多组用户,多线程和缓存来设计问题?

另外,我不能说哪个更有效率,但是您是否尝试过使用.NET 3.5中的新名称空间System.DirectoryServices.AccountManagement?如果有人应该已经优化了这个,那将是微软,但我认为我们之前都已经放弃了。

+0

我编辑了这个问题,补充说我只能使用.Net 2.0。另外,我只需要一次拉一个用户。 – 2009-09-04 19:25:17

相关问题