Наткнулся на то, что немерловые проекты скомпилированные в релизе и запущенные без отладчика работают значительно медленнее нежели аналогичные приложения написанные на C#.
Просмотр IL-а не выявил существенных различий. Тогда я начал анализировать атрибуты сборки и обнаружил в немерловых сборках следующее:
Здравствуйте, VladD2, Вы писали:
VD>Просмотр IL-а не выявил существенных различий. Тогда я начал анализировать атрибуты сборки и обнаружил в немерловых сборках следующее: VD>
VD>Этот атрибут дописывается в сборку если в свойствах проекта "Debug symbols" установлено в true.
На самом деле проблема конечно в том, что CompilationOptions.EmitDebug имеет тип bool.
Т.е. либо on, либо off. У компилятора c# параметр debug имеет три состояния: off/full/pdbOnly.
Если кто-нибудь скажет, зачем нужно собирать оптимизированную версию, но с отладочной информацией, я возьмусь поменять bool на enum {off, full, pdbOnly}. Будет, скажем, по умолчанию off, "-debug" даст full, "-debug:pdbonly" включит генерацию pdb, но не выключит оптимизацию.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, hardcase, Вы писали:
H>>Возможно виной тому эта настройка устанавливаемая при компиляции в релизе: H>>
H>><DebugType>pdbonly</DebugType>
H>>
VD>Это у нас в шаблонах такое?
Нет. Это в проекте компилятора.
Но как я вчера посмотрел, pdbonly не приводит к попаданию атрибута Debuggable в сборку.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Зачем в Release по умолчанию включены dbg-символы?
Здравствуйте, Блудов Павел, Вы писали:
БП>Если кто-нибудь скажет, зачем нужно собирать оптимизированную версию, но с отладочной информацией, я возьмусь поменять bool на enum {off, full, pdbOnly}. Будет, скажем, по умолчанию off, "-debug" даст full, "-debug:pdbonly" включит генерацию pdb, но не выключит оптимизацию.
Если рядом со сборкой лежит pdb-шка, то Exception.StackTrace содержит локейшены мест вызовов методов.
Re[2]: Зачем в Release по умолчанию включены dbg-символы?
Здравствуйте, Блудов Павел, Вы писали:
БП>На самом деле проблема конечно в том, что CompilationOptions.EmitDebug имеет тип bool. БП>Т.е. либо on, либо off. У компилятора c# параметр debug имеет три состояния: off/full/pdbOnly.