WPF DataGrid: переупорядочение строк?

Трудно сказать наверняка, потому что JIT-компилятор.NET может оптимизировать издержки далеко в некоторых (многие?) случаи.

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

таким образом, при вызове невиртуального метода Вы имеете к

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

1, то же в обоих случаях. Что касается 2, с виртуальным методом, необходимо вместо этого читать из фиксированного смещения в vtable объекте, и затем перейти к тому, везде, где это указывает. Это делает предсказание ветвлений тяжелее, и оно может продвинуть некоторые данные из кэша ЦП. Таким образом, разница не огромна, но она может сложить при создании каждого вызова функции виртуальным.

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

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

14
задан akjoshi 26 March 2012 в 07:54
поделиться