4
我上传包含所有需要的用户到使用ASP.NET身份和OwinContext和EF 6.我的网站上的Excel文件 我的代码看起来像下面:批量用户创建
foreach (var bulkUserDetail in bulkUser.BulkUserDetails)
{
var userManager = owinContext.GetUserManager<ApplicationUserManager>();
var userProfile = new UserProfile();
userProfile.Username = bulkUserDetail.Username;
AspNetUser newUser = new AspNetUser
{
UserName = userProfile.Username,
Email = bulkUserDetail.Email,
LastPasswordChangedDate = null,
};
var creationResult = userManager.Create(newUser);
if (creationResult.Succeeded)
{
string token = userManager.GeneratePasswordResetToken(newUser.Id);
}
}
的问题是,下面两行的表现相当令人失望
userManager.Create(newUser) -- (900 milliseconds)
userManager.GeneratePasswordResetToken(newUser.Id) --(1800 milliseconds)
数量多,即2000个用户,性能成为一个严重的问题。 有没有更好的做法来加快这个过程?我愿意接受建议,但我必须保留OwinContext库。
在此先感谢
一件事你重新获得你的循环的UserManager内部。这真的有必要吗?我没有看过代码,但如果发生任何延迟加载,它可能会减慢速度。 –
谢谢大卫。它帮助了很多。我还为整个上传块使用了一个Context对象,它也提高了性能。现在它在大约20分钟内加载2000条记录。任何其他想法? – Barsham
花了一些时间来查看源代码后,如果您使用ApplicationUserManager时发生死亡,我认为您运气不佳。没有任何东西支持任何类型的链接上下文或批处理用户创建。你最好的选择可能是某种并行化(如下面的建议),尽管这可能不一定会给你带来更好的结果。 –