C# 在OwinContext中批量创建用户(性能)
我正在使用ASP.NET标识、OWINCOTEXT和EF 6将包含所有必需用户的excel文件上载到我的网站。 我的代码如下所示:C# 在OwinContext中批量创建用户(性能),c#,asp.net,identity,bulk,C#,Asp.net,Identity,Bulk,我正在使用ASP.NET标识、OWINCOTEXT和EF 6将包含所有必需用户的excel文件上载到我的网站。 我的代码如下所示: foreach (var bulkUserDetail in bulkUser.BulkUserDetails) { var userManager = owinContext.GetUserManager<ApplicationUserManager>(); var userProfile = new UserPro
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);
}
}
在大量(即2000个用户)中,性能成为一个严重的问题。
有没有更好的方法来加速这个过程?我愿意接受建议,但我必须保留文本库
提前感谢您可以尝试在并行机中进行用户创建,这可能会加快总体时间,但这有一个问题:
- 对
和Create
的调用很慢,因为它们调用数据库GeneratePasswordResetToken
- 并行执行这项工作会增加对数据库的并发调用的数量,这可能会进一步降低数据库的速度,这实际上取决于托管数据库的硬件的性能
var userManager = owinContext.GetUserManager<ApplicationUserManager>(); Parallel.ForEach (bulkUser.BulkUserDetails, bulkUserDetail => { //Do you really need to make this userProfile as its not used 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); } })
var userManager=owinContext.GetUserManager(); Parallel.ForEach(bulkUser.BulkUserDetails,BulkUserDetails=> { //您真的需要将此userProfile设置为未使用吗 var userProfile=new userProfile(); userProfile.Username=bulkUserDetail.Username; AspNetUser newUser=新AspNetUser { UserName=userProfile.UserName, Email=bulkUserDetail.Email, LastPasswordChangedDate=null, }; var creationResult=userManager.Create(newUser); 如果(creationResult.Successed) { string token=userManager.GeneratePasswordResetToken(newUser.Id); } })
var userManager = owinContext.GetUserManager<ApplicationUserManager>();
Parallel.ForEach (bulkUser.BulkUserDetails, bulkUserDetail =>
{
//Do you really need to make this userProfile as its not used
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);
}
})