Я немного новичок в .NET, но не новичок в программировании, и я несколько озадачен тенденцией и волнением по поводу разборки скомпилированного кода .NET. Это кажется бессмысленным.
Именно из-за простоты использования .NET я использую его. Я написал C и реальную (аппаратный процессор) сборку в средах с ограниченными ресурсами. Это и стало причиной того, что мы потратили много усилий на детали, для повышения эффективности. Находясь в среде .NET, он как бы побеждает цель иметь высокоуровневый объектно-ориентированный язык, если вы тратите время на погружение в самые загадочные детали реализации. В ходе работы с .NET я отлаживал обычные проблемы с производительностью в странных условиях гонки, и я сделал все это, читая свой собственный исходный код, никогда не задумываясь о том, какой промежуточный язык генерирует компилятор. Например, довольно очевидно, что цикл for (;;) будет быстрее, чем foreach () в массиве, учитывая, что foreach () будет использовать перечисление object с вызовом метода переходить к каждому следующему разу вместо простого приращения переменной, и это легко доказать, если несколько миллионов раз выполнить тугой цикл (разборка не требуется).
Что действительно делает разборку IL глупой, так это то, что это не настоящий машинный код. Это код виртуальной машины. Я слышал, что некоторым людям нравится перемещать инструкции, чтобы оптимизировать их. Ты шутишь, что ли? Скомпилированный точно в срок код виртуальной машины не может даже выполнить простой цикл for (;;) со скоростью скомпилированного кода. Если вы хотите выжать каждый последний цикл из вашего процессора, то используйте C / C ++ и потратьте время на изучение реальной сборки. Таким образом, время, потраченное на понимание множества деталей низкого уровня, будет действительно полезным.
Итак, кроме того, что у них слишком много времени, почему люди разбирают двоичные файлы .NET (CLR)?