Как атрибут метода [MethodImpl (MethodImplOptions.NoInlining)] в C # может повлиять на производительность при работе с массивами? - PullRequest
4 голосов
/ 29 декабря 2010

Как [MethodImpl(MethodImplOptions.NoInlining)] атрибут метода в C # может повлиять на производительность при работе с массивами?

У меня есть метод, который перебирает int[][] - неровный массив. С этим атрибутом или без него измерение производительности дало тот же эффект.

Должно ли выравнивание дать некоторое улучшение при работе с зубчатыми массивами?

Ответы [ 2 ]

4 голосов
/ 29 декабря 2010

Итерация двумерного массива обычно обходится достаточно дорого, чтобы скрыть стоимость одного вызова метода.И делает вероятным, что метод все равно не будет встроенным, даже без атрибута, просто потому, что машинного кода слишком много.Инструменты + Опции, Отладка, Общие, снимите флажок «Подавить оптимизацию JIT при загрузке модуля».Выберите версию выпуска.Установите точку останова на вызове метода и запустите.Когда он сломается, щелкните правой кнопкой мыши по исходному коду и выберите «Перейти к разборке».Если вы видите инструкцию по вызову, то она не будет встроена.Вы можете увидеть машинный код перед вызовом, если метод принимает аргументы.

2 голосов
/ 29 декабря 2010

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

Это полезное краткое изложение правил: http://blogs.msdn.com/b/davidnotario/archive/2004/11/01/250398.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...