Лучше ли программировать, чтобы определять переменные вне foreach, хотя и более многословно? - PullRequest
23 голосов
/ 05 марта 2010

В следующих примерах:

  • первый кажется более многословным, но менее затратным из ресурсов
  • секунда менее многословна, но более расточительна (переопределяет строку в каждом цикле)

Какая практика кодирования лучше?

Первый пример:

using System;
using System.Collections.Generic;

namespace TestForeach23434
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> names = new List<string> { "one", "two", "two", "three", "four", "four" };

            string test1 = "";
            string test2 = "";
            string test3 = "";
            foreach (var name in names)
            {
                test1 = name + "1";
                test2 = name + "2";
                test3 = name + "3";
                Console.WriteLine("{0}, {1}, {2}", test1, test2, test3);
            }
            Console.ReadLine();
        }
    }
}

Второй пример:

using System;
using System.Collections.Generic;

namespace TestForeach23434
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> names = new List<string> { "one", "two", "two", "three", "four", "four" };

            foreach (var name in names)
            {
                string test1 = name + "1";
                string test2 = name + "2";
                string test3 = name + "3";
                Console.WriteLine("{0}, {1}, {2}", test1, test2, test3);
            }
            Console.ReadLine();
        }
    }
}

Ответы [ 12 ]

0 голосов
/ 05 марта 2010

Я обнаружил, что «поднятие» объявлений из циклов обычно является лучшей долгосрочной стратегией обслуживания. Компилятор обычно разберется с вещами приемлемо для производительности.

0 голосов
/ 05 марта 2010

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

...