Который является более эффективным способом присвоить значения переменным в.NET?

Ваш цикл for выполняет 0 итераций, это означает, что все, что находится внутри, никогда не запускается:

for(int k = 0; k < z; k++) { ...

Вам нужно установить для int z значение больше 0, если вы хотите, чтобы код внутри для цикла запустить в leasdt один раз ..

7
задан JamesSugrue 28 October 2008 в 01:46
поделиться

8 ответов

Компилятор не может знать, имеет ли выражение на правой стороне побочные эффекты, таким образом, это должно переоценить его при кодировании его дважды. Следовательно первое более эффективно в том смысле, что это не восстановит вызовы GetItem & ToString.

Таким образом, если Вы, программист знает, что эти вызовы чисты/идемпотентные, затем необходимо написать код первый путь.

15
ответ дан 6 December 2019 в 07:53
поделиться

Как Brian сказал, первый путь будет более эффективным, хотя, имеет ли это много значения в реальном мире, зависит от того, насколько дорогой дублированные функции, и как часто эту часть кода в целом называют.

Однако, а также будучи более эффективным, первый путь лучше указывает на намерение - что Вы означаете присваивать то же значение этим двум вещам. Это также помогает пригодности для обслуживания, потому что, если это должно измениться, только необходимо изменить его в одном месте. Для меня оба из них обычно более важны, чем эффективность.

6
ответ дан 6 December 2019 в 07:53
поделиться

Существует другая опция - составное присвоение:

someOtherClass.someField  = someClass.SomeField  = reader.GetItem[0].ToString();

С этим использованием компилятор оценит reader.GetItem[0].ToString() однажды, и использование это для присвоения обоим участникам (это не использует getиз someClass). Это делает это путем дублирования значения на стеке (которому не нужно явное локальное).

Очень эффективный, но быть честным я не также пришел бы в восторг от оригинала с переменной.

2
ответ дан 6 December 2019 в 07:53
поделиться

Хорошо предположение, что ToString функция не только раздает ссылку на некоторый предварительно сделанный внутренний объект, должно быть довольно ясно, что первая версия, где только один вызов к нему выполняется, будет самой быстрой. Однако, если это - проблема производительности, Вы должны заботиться об или не являетесь совершенно другой историей.

Одна проблема, чтобы сделать думает, что поединок, однако, состоит в том, что второй пример мог бы представить различные результаты в первой и второй строке, если объект получен доступ/изменен одновременно от другого потока.

0
ответ дан 6 December 2019 в 07:53
поделиться

У меня просто есть привычка к хранению значения в локальной переменной, если я собираюсь быть использованием его несколько раз. Обычно, тем не менее, это - потому что я предпочитаю компактность кода вместо того, чтобы быть слишком обеспокоенным эффективностью - хотя, я определенно сделал бы это при использовании его неоднократно в цикле.

Иногда, я непоследователен и просто перепечатаю, особенно просто с помощью средства доступа и не называя метод, который требует вычисления.

0
ответ дан 6 December 2019 в 07:53
поделиться

Вот мое эмпирическое правило. Когда в сомнении, представьте свой код. Оптимизирующий компилятор может удалить много кода, таким образом делающего Ваш код, выполненный быстрее.

Два факта нужно также рассмотреть:

  • .NET выделяет память очень быстро.
  • Чрезмерный мусорный бак замедляет Ваше приложение из-за дополнительных отсутствий страницы, плохой местности ссылки, чрезмерной сборки "мусора".

Это подразумевает, что под поверхностным наблюдением, Ваш код может быть очень быстрым, но если Вы генерируете много мусора, то производительность Вашей программы пострадает, поскольку это работает некоторое время.

0
ответ дан 6 December 2019 в 07:53
поделиться

Вопросы удобочитаемости. Что использование "s" называют переменным?

Кроме того, вместо того, чтобы использовать [0], имя поля будет иметь больше смысла.

0
ответ дан 6 December 2019 в 07:53
поделиться

Есть и другие вопросы, которые следует учитывать. Если использование s для присвоения другим переменным отделено от того, где s инициализируется более чем парой строк кода, вы открываете возможность того, что кто-то другой придет и добавить код позже, который изменяет значение s между его использованием или каким-то образом разветвляется вокруг исходного назначения на s .

Я часто вижу одну вещь - это присвоение функция возвращается к переменной, даже если это значение используется только в одном месте, и я ненавижу это, потому что (и не имеет значения, как называется эта переменная), что неизбежно приводит к необходимости искать, где эта переменная была назначена чтобы знать, что он на самом деле представляет. Присвоение возвращаемого значения функции непосредственно тому, что будет использовать, явно указывает, что '

В программировании есть фракция, которая верит в «программирование без переменных» (в духе знаменитой статьи о программировании без использования goto несколько десятилетий назад). Например, XSL, хотя и имеет «переменные», они не изменяются после их первоначального назначения в пределах одной области. Некоторые говорят, что это помогает гарантировать отсутствие непредвиденных побочных эффектов.

0
ответ дан 6 December 2019 в 07:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: