![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Rockie |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: нет Всего: 31 |
Добрый день!
Пишу например такой код(присоединяем к мылу несколько вложений):
поставил ReSharper 6. он выдает мне рекомендацию и предлагает сделать "Move declaration closer to usage". Тогда код получится такой:
С точки зрения производительности это ведь неправильно, по крайней мере в C++, потомучто в цикле каждый раз создается новый объект под который выделяется память(ресурсы). А в C# что, это не приводит к потерям производительности, что решарпер любезно предлагает мне запихнуть объявление переменной внутрь цикла? -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
||||
|
|||||
| ToLive |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 21.12.2006 Репутация: нет Всего: нет |
Я еще совсем новичек в программировании, но риску предположить, что в в первом случае ссылка на объект останется после выхода из цикла и не будет еще подлежать сборке мусора. Во втором же случае, по выходе из цикла все созданные объекты сразу могут быть утилизированы сборкой мусора (когда она запустится).
Либо решейпер просто руководствуется принципом более удобного чтения кода, когда переменные, которые используются только в одном месте, должны быть там и объявленны. Очень интересно услышать мнение авторитетных людей |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: нет Всего: 31 |
Спасибо за ответ!
В общем спрашивал я примерно следующее - по аналогии с C++-овой логикой в первом случае ресурсы в цикле выделяются под один участок памяти, а во втором под разные(что захламляет память). Либо в .NET это не суть важно и поэтому решарпер и предлагает мне сделать код читабельней. В общем насколько я сейчас понял, в .NET сборщик мусора работает с так называемой "кучей", в которой двигает объекты. То есть в первом случае абсолютно не факт что объект будет лежать на том же месте. Так что решарпер получается прав и остается писать как удобнее). Кому интересно могу кинуть линк на обсуждение. -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| Ptica_Oz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 1.3.2007 Репутация: нет Всего: нет |
Ну и что с того? Как это сказывается на производительность? Если объясните, буду признательна. А вообще мне интересно, дайте, пожалуйста линк. |
|||
|
||||
| СерегаГоляков |
|
|||
|
Всё супер :) ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 26.4.2010 Где: НСК Репутация: нет Всего: нет |
Думается, если сообщения отправляются ну ооооочень часто, то лучше её попределить зарание.
--------------------
Список всех полезных программ в ОДНОЙ программеhttps://sites.google.com/site/coolprogramms...latnyh-programm...Пьяные белазисты в карьереhttp://www.youtube.com/watch?v=6FGNGMwxJZ4 |
|||
|
||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: нет Всего: 31 |
Правильней мне стоило выразиться "с точки зрения расхода памяти". Или "в связи с многократным выделением памяти в цикле".
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
по аналогии С++ в левой части Вы определяете указатель,создание которого на стеке не затратная и легко оптимизируемая компиляторм вещь, в отличии от правой части, где происходит непосредственное создание объекта в куче.. |
|||
|
||||
| Voyager |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 8.2.2005 Репутация: 3 Всего: 18 |
Никакой разницы, оба способа одинаковы с точки зрения производительности, компилятор в обоих случаях создаст локальную переменную метода.
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |