Последние несколько дней я провел в свободное от изучения CIL время и размышлял о переходе на метку (br) по сравнению с вызовом метода (объявление .method).
Я знаю, что если вы объявитеметод, вы сможете получить доступ к нему извне сборки, но как насчет создания меток закрытых методов и просто использования br
для перехода к нему?Есть ли какой-то выигрыш в производительности?
Чтобы устранить путаницу, вот упрощенный пример (из-за ограничений пространства и времени):
// calling code
ldc.i4 5
call int32 testmethod(int32)
// other code
// method
.method public int32 testmethod(int32)
{
ldc.i4 10
add
ldc.i4 20
mul
ret
}
Так что вместо того, чтобы делатьэтот метод, я мог бы сделать это с метками и ветвями:
ldc.i4 5
br testlabel
leftoff:
// remaining instructions
testlabel:
.lcd.i4 10
add
ldc.i4 20
mul
br leftoff
Так что метод / метка testlabel берет и int32, а затем добавляет 10 и умножает этот результат на 20. Достаточно просто.Я понимаю, что единственным недостатком (который я не упомянул изначально) является удобочитаемость, но если это генерируется компилятором, читаемость становится менее важной.Итак, используя второй пример, принесет ли использование меток и переходов к коду какие-либо преимущества в производительности?Если нет, то что, если я смогу разместить его в короткой ветке?(Уш)