У меня есть следующий код, в котором я создаю список пользовательского класса, используя массив MembershipUser
.
Ниже приведен пользовательский класс, список которого создан:
public class userandGroup :IComparable{
public string id { get; set; }
public string Name { get; set; }
public string DisplayName { get; set; }
public string type { get; set; }
public int? CompareTo(Object obj)
{
if (obj is userandGroup)
return this.DisplayName.CompareTo((obj as userandGroup).DisplayName);
return null;
}
}
Ниже приводитсякод, который заполняет userlist
:
MembershipUserCollection tempuserlist = GetProvider("DefaultProfileProvider", applicationName).GetAllUsers(currentPage - 1, pageSize, out totalUsers);
MembershipUser[] userlist = new MembershipUser[totalUsers];
tempuserlist.CopyTo(userlist, 0);
Ниже приведен код, который генерирует список userandGroup
(пользовательский класс):
foreach (MembershipUser usr in userlist)
{
userandGroup usrgp = new userandGroup();
usrgp.id = ((Guid)usr.ProviderUserKey).ToString() ;
usrgp.Name = usr.UserName;
ProfileBase profile = ProfileBase.Create(usr.UserName);
profile.Initialize(usr.UserName, true);
// Following line approximately takes 40ms per loop.
usrgp.DisplayName = profile.GetPropertyValue("FirstName").ToString() + " " + profile.GetPropertyValue("LastName").ToString();
usrgp.type = "user";
lst.Add(usrgp);
}
Как написано в комментарии, строка;
usrgp.DisplayName = profile.GetPropertyValue("FirstName").ToString() + " " + profile.GetPropertyValue("LastName").ToString();
занимает 40 мсек за один цикл.У меня 40 пользователей на данный момент.Таким образом, выполнение цикла занимает около 1600 мс.Если количество пользователей увеличится, цикл займет ужасное время.
Как можно сократить время выполнения строки или есть какой-либо другой способ получить имя и фамилию пользователя из ProfileBase