У меня есть метод расширения, который нужно запросить базу данных для проверки прав доступа пользователей следующим образом:ASP MVC 5 Уничтожение контекста объекта
public static bool HasPermission(this IPrincipal user, string permission)
{
ApplicationUser appUser = ApplicationUserManager.GetUser(user.Identity.GetUserId());
return appUser.HasPermission(permission);
}
В настоящее время вызов, чтобы получить пользователю приложения реализовано следующим образом:
public static ApplicationUser GetUser(string userId)
{
return GetUser(new ApplicationDbContext(), userId);
}
public static ApplicationUser GetUser(ApplicationDbContext context, string userId)
{
ApplicationUser _retVal = null;
try
{
_retVal = context.Users.Where(p => p.Id == userId).FirstOrDefault();
}
catch (Exception)
{
}
return _retVal;
}
Теперь в моих представлениях и действиях контроллера я часто вызываю метод User.HasPermission(). Поэтому я рассматриваю влияние производительности на частое обращение к этому методу. Было бы лучше реализовать вызов, завершающий его внутри оператора using, как показано ниже, чтобы контекст удалялся, или я правильно понимаю, как я уже реализовал его выше?
public static bool HasPermission(this IPrincipal user, string permission)
{
using (ApplicationDbContext _context = new ApplicationDbContext())
{
var userId = user.Identity.GetUserId();
ApplicationUser applicationUser = _context.Users.Where(p => p.Id == userId).FirstOrDefault();
return applicationUser.HasPermission(permission);
}
}
Сколько ApplicationUser существует в вашем db? Вы ожидаете, что это число увеличится или останется довольно похожим? Ваше приложение 'hasPermission' выглядит отлично, это гарантирует, что сборщик мусора уничтожит объект контекста в конце блока и освободит память. Однако, если вы проверяете разрешения для одного и того же пользователя снова и снова, возможно, стоит сохранить этот объект в памяти, а не постоянно повторно запрашивать базу данных. – gudthing
@gudthing, поэтому нет необходимости обертывать его в используемый блок? Количество пользователей увеличится с 500 до 1000. – adam78
@ gudthing, как вы собираетесь хранить его в памяти? Какой пример кода поможет проиллюстрировать? – adam78