Универсальный поставщик членства создает проблемы производительности пользователя

К сожалению, я использую новейшие универсальные провайдеры для управления членством в моей хостинговой разработке на основе 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 для образца.

С уважением,

Мин Сюй.

Другие вопросы по тегам