0

根据此处找到的代码,我正在查询一个 AD 组以填充关联的下拉列表。下面的代码大约需要 30 秒才能运行,所以想确保我正在使用最好的代码吗?理想情况下,我希望它运行得更快,但感谢大约 1500 人不会花费几秒钟。

            // define AD group to use for populating associate list...
        const string groupName = "Group-Name-X";

        // define array objects...
        var userIdLookup = new SortedList();
        var emailLookup = new SortedList();
        var listContents = new SortedList<string, string>();

        // initialise the AD tools class...
        var adm = new ADMethods();

        // get the members of the specified AD group...
        GroupPrincipal group = adm.GetGroup(groupName);

        // iterate over its members
        foreach (Principal p in group.Members)
        {
            // get the data for the user...
            var groupMember = adm.GetUser(p.SamAccountName);

            // if user account found...
            if (groupMember != null)
            {
                // get the user's mail address...
                string mailAddress = groupMember.EmailAddress ?? p.SamAccountName;

                // if domain extension present ...
                if (mailAddress.Contains("@"))
                {
                    // remove it...
                    mailAddress = mailAddress.Split('@')[0].Trim();
                }

                // create a name starting with surname...
                string associateName = string.Format("{0},", groupMember.Surname);

                // append the first name...
                associateName += string.Format(" {0}", groupMember.GivenName);

                // if the middle name is present...
                if (groupMember.MiddleName != string.Empty)
                {
                    // append it to the string...
                    associateName += string.Format(" {0}", groupMember.MiddleName);
                }

                // get the employee ID...
                string associateNumber = p.SamAccountName;

                // if associate already added...
                if (listContents.ContainsKey(associateName))
                {
                    // skip rest of code for this iteration...
                    continue;
                }

                // add to list that will populate dropdown...
                listContents.Add(associateName, mailAddress);

                // add to lookup collection of ccmail to userID
                userIdLookup.Add(mailAddress, associateNumber);

                // add associate name to list...
                emailLookup.Add(associateNumber, mailAddress);
            }
        }
4

1 回答 1

0

您可以考虑为特定组的成员执行属性范围查询。由于它目前正在实施,因此减速很可能是您必须为每个成员执行新的搜索(您需要使用类似秒表的东西来验证)。使用属性范围查询,您可以一次性加载所有用户,然后对他们进行处理。

我没有尝试过使用 System.DirectoryServices.AccountManagement,但我知道您可以使用 System.DirectoryServices 和 System.DirectoryServices.Protocols 来做到这一点。

DirectorySearcher 示例

于 2013-03-21T17:45:14.747 回答