(Я еще не пробовал)

у игру XNA, где я делаю проверку столкновений на пиксель. Цикл, который проверяет это, делает это путем сдвига int и побитового ORing, и, как правило, его трудно читать и понимать.

Я хотел бы добавить частные методы, такие какprivate bool IsTransparent(int pixelColorValue) чтобы сделать цикл более читабельным, но я не хочу накладных расходов на вызовы методов, так как это очень чувствительный к производительности код.

Есть ли способ заставить компилятор встроить этот вызов или я просто надеюсь, что компилятор выполнит эту оптимизацию?

Если нет способа форсировать это, есть ли способ проверить, был ли метод встроен, если не считать разборку? Будет ли метод отображаться в рефлексии, если он был встроен, а других абонентов не существует?

Редактировать: Я не могу заставить это, так я могу обнаружить это?

 Mahmoodvcs10 окт. 2014 г., 15:39
Вы можете (в .Net 4.5). с помощью:[MethodImpl(MethodImplOptions.AggressiveInlining)]

Ответы на вопрос(1)

Решение Вопроса

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

Так что даже поиск в .NET Reflector вам не поможет.

 Ben S05 мар. 2009 г., 23:02
Мой плохой, я неправильно понял это.
 Ben S05 мар. 2009 г., 22:58
Другие начинают расходиться в рефлексии, поскольку она использует стек вызовов.stackoverflow.com/questions/44153/...
 Alex Reitbort05 мар. 2009 г., 23:00
Я не сказал отражение, я сказал отражатель, как в Red Gates .NET Reflector.

Ваш ответ на вопрос