Недавно у меня возникла дискуссия с коллегой по вопросу о том, должен ли быть репозиторий в веб-приложении (в данном случае, слоем поверх Entity Framework) как статическом или нестационарном.Репозиторий как статический или нестатический класс?
В этом вопросе меня не интересует, является ли одна или другая реализация лучшей (ООП), потому что это сделает ответы субъективными.
Что меня интересует: Является ли создание экземпляра Entity Framework DbContext
иным способом в CLR, когда вы сравниваете статическую с нестатическим классом? Меня особенно интересуют многопоточные проблемы и использование памяти, потому что этот код работает в веб-приложении MVC.
Edit: Просто для уточнения: Я не заинтересован в утилизации или сборке мусора класса хранилища, только то, что происходит с локальной переменной context
. Правильно ли сказать, что собранный мусор (или, по крайней мере, отмечен как сборщик мусора), когда метод возвращается?
Статическое хранилище
public static class AccountRepository
{
public static AccountModel GetAccountById(int accountId)
{
using (var context = new EntitiesContext())
{
var account = context.Accounts.FirstOrDefault(a => a.Id == accountId);
if (account == null)
{
return null;
}
return new AccountModel
{
Id = account.Id,
Username = account.Username,
// etc...
};
}
}
}
нестатические хранилище
public class AccountRepository
{
public AccountModel GetAccountById(int accountId)
{
using (var context = new EntitiesContext())
{
var account = context.Accounts.FirstOrDefault(a => a.Id == accountId);
if (account == null)
{
return null;
}
return new AccountModel
{
Id = account.Id,
Username = account.Username,
// etc...
};
}
}
}
Возможно, я ошибаюсь, но как применяется утилизация/сборка мусора для статических элементов? Они никогда не располагаются/не отрываются. – Veverke
Статические элементы хранятся на высокочастотной куче, и эта куча никогда не приближается к GC. –