UserManager замедляется при создании большого количества пользователей, как я могу утилизировать и снова создать экземпляр для каждого пользователя в моем действии? - PullRequest
0 голосов
/ 01 июня 2018

У меня есть действие, которое генерирует много новых пользователей на основе старой БД, элемент с деталями передается и используется для этого, называемый здесь «regitem».Цикл foreach циклически перебирает каждый регитем и создает пользователя:

  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 с помощьюповторяющееся действие?

1 Ответ

0 голосов
/ 20 июня 2018

Я обнаружил, что должен был создать все части 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);
...