2013-03-19 6 views
1

У меня есть проект .NET класса класса .NET. Когда я его компилирую в релизе, я заметил, что двоичный файл (.dll) не меньше размера, чем отладка. Почему это? Разве это не должно быть меньше? Он также должен выполнить немного быстрее? Кроме того, как я могу определить, была ли .dll построена как отладка или выпуск?Release vs Debug Build

+0

Это зависит от размера сборки. Если у вас большая сборка, требующая сохранения многих символов для отладки, выпуск может быть значительно меньше. –

+0

@ bash.d: отладка 98K и выпуск 97K. – JaJ

ответ

1

Существует очень небольшая разница в IL, что C# компилятор генерирует при создании окончательной версии вашей сборки. Единственное примечательное, что он делает, это опустить инструкции NOP, которые помогут вам установить точку останова на фигурной скобке. Всего несколько лакомых кусочков за пределами, вроде как не испускающих пустой конструктор классов. Все мелочи, связанные только с облегчением отладки кода. Учитывая опцию /filealign по умолчанию, коэффициенты хороши, что результирующая сборка не меньше. Или это всего на несколько килобайт меньше.

Компилятор C# не имеет встроенного оптимизатора, это не его работа. Оптимизатор встроен в дрожание. Контролируется атрибутом, который испускает компилятор, DebuggableAttribute.IsJITOptimizerEnabled. Что такое true для сборки Debug и false для сборки релиза. Вы можете увидеть его значение с помощью ildasm.exe

Вы найдете вид оптимизации, выполняемый джиттером, описанным в this answer.

+0

Удивительный! Большое спасибо за информацию! – JaJ

1

Исполняемые файлы отладки и выпуска (dll, exe, whatever) идентичны, если вы не используете в своем коде директивы компилятора #if DEBUG. Разница заключается в том, что компиляция отладки генерирует файлы .pdb, содержащие информацию об отладке.

Этот инструмент может помочь вам выяснить, если DLL является отладка или выпуск: http://assemblyinformation.codeplex.com

+0

ОК, это отличная новость ... Большое спасибо за ответ! – JaJ