gpt4 book ai didi

c# - OwinContext 中的批量用户创建(性能)

转载 作者:太空狗 更新时间:2023-10-29 23:50:36 24 4
gpt4 key购买 nike

我正在使用 ASP.NET Identity、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 库。

提前致谢

最佳答案

您可以尝试在并行内创建用户,这可能会加快整体时间,但是这有一个问题:

  • 调用 CreateGeneratePasswordResetToken 很慢,因为它们调用数据库
  • 并行执行工作会增加对数据库的并发调用数量,可能会进一步降低速度,这实际上取决于托管数据库的硬件有多好。

    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);

    }
    })

关于c# - OwinContext 中的批量用户创建(性能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30724285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com