Универсальный поставщик членства создает проблемы производительности пользователя
К сожалению, я использую новейшие универсальные провайдеры для управления членством в моей хостинговой разработке на основе Azure, MVC 3, SQL Azure. Я написал подпрограмму для массового создания пользователей из файла CSV. Файл анализируется и заполняется модель. Затем я перебираю коллекцию, создавая пользователей.
Ключевой линией, которая занимает невероятное количество времени, является стандарт
Membership.CreateUser(
model.UserName,
model.Password,
model.Email,
null,
null,
model.IsApproved,
out createStatus);
Даже на "Большом" 4-х ядерном сервере эта строка может занять почти 1 секунду. Это означает, что для 10000 пользователей потребуется около 3 часов. Чтобы сделать это напрямую в базу данных, если бы я мог, вероятно, потребуется несколько минут.
Еще хуже то, что мне также нужно проверять существующих пользователей и обновлять их, если они это делают. Я положил в необходимые индексы, и база данных очень быстро. Честно говоря, что может делать этот провайдер?
Я что-то не так делаю, или этот провайдер просто бесполезен для крупномасштабных систем? У кого-нибудь еще были эти проблемы?
Я даже не буду заходить в провайдер профиля, достаточно сказать, что я написал свой собственный!
1 ответ
Хотя я раньше не пользовался этим провайдером, но главное - создать нескольких пользователей одновременно. 1 секунда на пользователя является разумной. Более того, большая часть времени уходит на ожидание возврата базы данных. Когда текущий поток ожидает возврата базы данных, я хотел бы предложить вам создать новый поток, чтобы начать создавать другого пользователя. Поэтому вместо того, чтобы создавать пользователей по одному в обычном цикле foreach, используйте Parallel.ForEach, который автоматически создаст пользователей параллельно, вы можете обратиться по http://msdn.microsoft.com/en-us/library/dd460720.aspx для образца.
С уважением,
Мин Сюй.