Based on code found here, I'm querying an AD group to populate a dropdownlist of associates. The code below takes about 30 seconds to run through, so would just like to make sure I'm using making the best of the code? Ideally I'd like it to run faster, but appreciate around 1500 people is not going to take a few seconds.
// 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);
}
}