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-мире.
Ответы
Ответ 1
Ну, это зависит от того, как реализовано DropDownItems.Count
, но, откровенно говоря, это скорее простое свойство, поддерживаемое полями, что сделает первый код столь же быстрым, как второй, но гораздо более читаемым.
Считывание сначала - тогда измерьте производительность и микро-оптимизируйте только там, где это необходимо.
По возможности, предпочитайте цикл foreach
, чтобы начать, хотя... снова, по причине удобочитаемости.
Даже если вы хотите использовать временную переменную, я бы просто продержал цикл for
, вытащив счетчик для разделения переменной. По общему признанию, это означает более широкий охват, но это проще:
int count = menuItem.DropDownItems.Count;
for (int i = 0; i < count; i++)
{
...
}
Это скорее всего личное предпочтение.
Ответ 2
Какая часть ...
? В любом вопросе такого рода мой первый ответ заключается в том, чтобы спросить: "Это даже имеет значение, в данном случае?" Производительность всегда относительна. Если эта точная строка кода находится в стеке или в конце ее более 10% времени, то это стоит беспокоиться, и это обычно очень маловероятно.