1) может быть выгодно объявить ваши рабочие объекты как переменные частного класса, но не так часто, как вы думаете.Есть несколько вещей, которые вы должны рассмотреть.
Во-первых, использование закрытых переменных класса делает ваш класс по своей природе не поточно-ориентированным.Если вы не используете локальное хранилище потоков, которое имеет свои собственные проблемы с производительностью.
Часто оказывается, что повторное использование объекта обходится дороже, чем выделение нового.Например, очистка Hashset или List часто намного дороже, чем выделение нового, и сборщик мусора может позаботиться о том, чтобы избавиться от него, когда вы закончите."пока экземпляр класса находится в области видимости.Это может быть проблемой, если вы забудете очистить его (т. Е. Установить null
или очистить коллекцию), поскольку все, на что ссылаются частные переменные, не будет собираться мусором.Такое использование закрытых переменных исключает большую часть преимуществ, которые вы получаете, имея сборщик мусора.
Диспетчер памяти .NET очень хорошо оптимизирован для недолговечных объектов.Я обнаружил очень мало ситуаций, в которых имеет смысл выдвигать объект уровня метода в область видимости класса, чтобы избежать выделения памяти и издержек сборщика мусора.
Я повторю совет, данный @dtb: используйте профилировщик, чтобы найти узкие места и определить потенциальные возможности оптимизации.В противном случае вы просто ковыряетесь в темноте, и ваша «оптимизация», скорее всего, негативно скажется на производительности.