UserManager 在创建许多用户时速度变慢,如何在我的操作中为每个用户创建再次配置和实例化?

UserManager slowing down when creating many users, how can I dispose and instantiate again for each user creation in my action?

我有一个基于旧数据库生成许多新用户的操作,传递了一个包含详细信息的项目并用于执行此操作,此处命名为 'regitem'。 foreach 循环遍历每个 regitem 并创建一个用户:

  var user = new ApplicationUser { UserName = regitem.Email.Trim(), Email = regitem.Email.Trim(), Fname = regitem.Fname.Trim(), Lname = regitem.Lname.Trim(), OrgID = OrgID, RegistrationDate = regitem.RegistrationDate ?? DateTime.Now, LastLoginDate = regitem.LastLoginDate, EmailConfirmed = true, PhoneNumber = regitem.PhoneNumber };


                        var result = UserManager.Create(user, regitem.Password);

随着时间的推移,UserManager 变得越来越慢。据我了解,这是因为上下文没有被处理,更好的方法是为每个用户帐户创建实例化和处理。在控制器中UserManager实例化如下:

 private ApplicationUserManager _userManager;
    public AddOldDataController(ApplicationUserManager userManager, ApplicationSignInManager signInManager)
    {
        UserManager = userManager;
    }

    public ApplicationUserManager UserManager
    {
        get
        {
            return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
        }
        private set
        {
            _userManager = value;
        }
    }

我知道如何为每个用户创建处理 UserManager,但我不确定每次如何实例化。我读过 using 语句每次都会自动处理上下文,但我又不知道在这种情况下我应该如何实例化。

执行此操作并避免 UserManager 因重复操作而变慢的最佳方法是什么?

我发现我必须创建 usermanager 的所有部分,然后再处理它。事实上,我不确定我是否需要再处理 usermanager,因为它在每个周期都会被替换。下面是为每个循环生成 usermanager 对象的代码:

var store = new UserStore<ApplicationUser>(new ApplicationDbContext());
ApplicationUserManager _userManager = new ApplicationUserManager(store);
var usermanager = _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
var user = new ApplicationUser { UserName = regitem.Email.Trim(), Email = regitem.Email.Trim(), Fname = regitem.Fname.Trim(), Lname = regitem.Lname.Trim(), OrgID = OrgID, RegistrationDate = regitem.RegistrationDate ?? DateTime.Now, LastLoginDate = regitem.LastLoginDate, EmailConfirmed = true, PhoneNumber = regitem.PhoneNumber };
var result = usermanager.Create(user, regitem.Password);