| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Объявление переменной вне цикла-имеет ли смысл |
| Автор: Rockie 11.10.2011, 12:14 | ||||
| Добрый день! Пишу например такой код(присоединяем к мылу несколько вложений):
поставил ReSharper 6. он выдает мне рекомендацию и предлагает сделать "Move declaration closer to usage". Тогда код получится такой:
С точки зрения производительности это ведь неправильно, по крайней мере в C++, потомучто в цикле каждый раз создается новый объект под который выделяется память(ресурсы). А в C# что, это не приводит к потерям производительности, что решарпер любезно предлагает мне запихнуть объявление переменной внутрь цикла? |
| Автор: ToLive 11.10.2011, 18:56 |
| Я еще совсем новичек в программировании, но риску предположить, что в в первом случае ссылка на объект останется после выхода из цикла и не будет еще подлежать сборке мусора. Во втором же случае, по выходе из цикла все созданные объекты сразу могут быть утилизированы сборкой мусора (когда она запустится). Либо решейпер просто руководствуется принципом более удобного чтения кода, когда переменные, которые используются только в одном месте, должны быть там и объявленны. Очень интересно услышать мнение авторитетных людей |
| Автор: Rockie 12.10.2011, 11:10 |
| Спасибо за ответ! В общем спрашивал я примерно следующее - по аналогии с C++-овой логикой в первом случае ресурсы в цикле выделяются под один участок памяти, а во втором под разные(что захламляет память). Либо в .NET это не суть важно и поэтому решарпер и предлагает мне сделать код читабельней. В общем насколько я сейчас понял, в .NET сборщик мусора работает с так называемой "кучей", в которой двигает объекты. То есть в первом случае абсолютно не факт что объект будет лежать на том же месте. Так что решарпер получается прав и остается писать как удобнее). Кому интересно могу кинуть линк на обсуждение. |
| Автор: Ptica_Oz 12.10.2011, 13:46 | ||
Ну и что с того? Как это сказывается на производительность? Если объясните, буду признательна. А вообще мне интересно, дайте, пожалуйста линк. |
| Автор: СерегаГоляков 12.10.2011, 17:18 |
| Думается, если сообщения отправляются ну ооооочень часто, то лучше её попределить зарание. |
| Автор: Rockie 12.10.2011, 17:27 |
| Правильней мне стоило выразиться "с точки зрения расхода памяти". Или "в связи с многократным выделением памяти в цикле". |
| Автор: mes 12.10.2011, 21:58 |
по аналогии С++ в левой части Вы определяете указатель,создание которого на стеке не затратная и легко оптимизируемая компиляторм вещь, в отличии от правой части, где происходит непосредственное создание объекта в куче.. |
| Автор: Voyager 20.10.2011, 10:03 |
| Никакой разницы, оба способа одинаковы с точки зрения производительности, компилятор в обоих случаях создаст локальную переменную метода. |