Подтвердить что ты не робот

For-loop - нужна или нет?

Нужно ли мне оптимизировать мои FOR-петли, как показано ниже, или компилятор сделает это для меня?

//this is slow, right?
for (int i = 0; i < menuItem.DropDownItems.Count; i++)
{
    ...
}

//this should be much faster right?
for (int i = 0, count = menuItem.DropDownItems.Count; i < count; i++)
{
    ...
}

PS. Держу пари, что это уже было опубликовано, но я ничего не нашел, извините за возможный дублировать.

ПФС. Извините, я кодирую много JavaScript - где мы должны думать об этих оптимизациях... Может показаться смешным в .net-мире.

4b9b3361

Ответ 1

Ну, это зависит от того, как реализовано DropDownItems.Count, но, откровенно говоря, это скорее простое свойство, поддерживаемое полями, что сделает первый код столь же быстрым, как второй, но гораздо более читаемым.

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

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

Даже если вы хотите использовать временную переменную, я бы просто продержал цикл for, вытащив счетчик для разделения переменной. По общему признанию, это означает более широкий охват, но это проще:

int count = menuItem.DropDownItems.Count;
for (int i = 0; i < count; i++)
{
    ...
}

Это скорее всего личное предпочтение.

Ответ 2

Какая часть ...? В любом вопросе такого рода мой первый ответ заключается в том, чтобы спросить: "Это даже имеет значение, в данном случае?" Производительность всегда относительна. Если эта точная строка кода находится в стеке или в конце ее более 10% времени, то это стоит беспокоиться, и это обычно очень маловероятно.