DataTable Loop Сравнение производительности

голоса
9

Какой из следующих имеет лучшую производительность?

Я видел метод два, реализованный в JavaScript с огромным приростом производительности, однако, я не смог измерить любой выигрыш в C # и было интересно, если компилятор уже делает метод 2, даже если написано, как метод 1.

Теория, метод 2 является то, что код не имеет доступа к DataTable.Rows.Count на каждой итерации, он может просто получить доступ к ИНТ с.

Метод 1

for (int i = 0; i < DataTable.Rows.Count; i++) {
    // Do Something
}

Способ 2

for (int i = 0, c = DataTable.Rows.Count; i < c; i++) {
    // Do Something
}
Задан 07/08/2008 в 11:01
источник пользователем
На других языках...                            


1 ответов

голоса
4

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

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

Но, в этом случае, вы можете добавить новые строки в таблице данных, как часть вашего цикла, и, таким образом, это до вас, чтобы сделать эту гарантию, в том, как вы сделали это.

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

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

Вывод: Если вы знаете, или готово принять, что индекс конца цикла постоянен на протяжении цикла, поместите его в переменный.


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

Ответил 07/08/2008 в 11:09
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more