C#Active Directory浏览最佳实践

时间:2017-02-07 14:32:41

标签: c# performance active-directory

直截了当地说,我有一个新项目的请求,我必须找到一个特定的Active Directory组列表的主要和二级所有者。当我获得每个组的二级所有者阵列时,每个所有者都由他们的" distinguishedName"这导致我使用这样的片段来获取所有者的信息:

using (DirectoryEntry entry = new DirectoryEntry("LDAP://" + distinguishedName))
{
        using (DirectorySearcher dSearch = new DirectorySearcher(entry))
        {
            SearchResult found = dSearch.FindOne();
            if (found != null)
            {
                using (DirectoryEntry userEntry = found.GetDirectoryEntry())
                {
                    Console.WriteLine("Username: " + userEntry.Properties["namefield"].Value + " : " + userEntry.Properties["emailfield"].Value);
                }
            }
            else
            {
                Console.WriteLine("User not found with distinguishedName: " + distinguishedName);
            }
        }
}
GC.Collect();

我有点担心这项任务的性能,因为我必须在页面加载序列中获取此信息,以检查记录的用户是否是所有者。我还有其他AD浏览任务要做,而且我一直在用C#和AD做一些关于最佳实践的研究,并且没有发现任何有用的东西,所以我想你们可以就此提供一些意见。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

  如果您拥有对象的可分辨名称,则可以直接绑定到该对象。使用DirectorySearcher进行搜索是一种过度操作。只需创建DirectoryEntry对象并调用其RefreshCache方法即可。广告中最快的性能由位于System.DirectoryServices.Protocols命名空间下的类提供。还可以再做一个优化:在程序开始时创建一个DirectoryEntry对象并绑定,例如。 G。为了rootdse。这将在引擎盖下建立ldap连接。所有其他查询将使用此ldap连接。保持对象存活直到程序完成

感谢:oldovets