Как С# или другие языки, если на то пошло, обрабатывают выделение памяти (и разделение памяти) между этими двумя сценариями:
1.) Вызывается метод для статического класса.
public Program {
Foo foo = Loader.load();
}
public static Loader {
public static Foo load() {
return new Foo();
}
}
2.) В экземпляре вызывается метод, который затем выходит из области видимости.
public Program {
Foo foo = new Loader().load();
}
public Loader {
public Foo load() {
return new Foo();
}
}
Я предполагаю, что статический класс загружен и остается в памяти; тогда как экземпляр класса уступает коллекции мусора на досуге С#. Есть ли какие-либо плюсы или минусы этих двух парадигм? Есть ли когда-нибудь время, когда у вас есть класс, который никогда не нужно создавать (т.е. Какой-то ресурс-загрузчик или factory), но вы все равно используете вторую методологию, чтобы воспользоваться сборкой мусора?
Важная часть моего вопроса заключается в том, может ли первая парадигма, будучи в какой-то мере концептуально правильной, может страдать от ненужного использования памяти.