Продолжая мой предыдущий вопрос , существует ли всеобъемлющий документ, в котором перечислены все доступные различия между режимами отладки и выпуска в приложении С# и, в частности, в веб-приложении?
Какие отличия существуют?
Продолжая мой предыдущий вопрос , существует ли всеобъемлющий документ, в котором перечислены все доступные различия между режимами отладки и выпуска в приложении С# и, в частности, в веб-приложении?
Какие отличия существуют?
"Отладка" и "Релиз" - это просто имена для предопределенных конфигураций проектов, определенных Visual Studio.
Чтобы увидеть различия, просмотрите вкладку "Сборка" в "Свойства проекта" в Visual Studio.
Различия в VS2005 включают:
Константа DEBUG, определенная в конфигурации отладки
Оптимизация кода включена в конфигурации Release
а также другие различия, которые вы можете увидеть, нажав кнопку "Дополнительно"
Но вы можете:
Измените настройки сборки для конфигураций Debug и Release в Project Propeties/Build
Создайте свои собственные настраиваемые конфигурации, щелкнув правой кнопкой мыши на решении в обозревателе решений и выбрав Configuration Manager
Я думаю, что поведение константы DEBUG довольно ясное (на эту ссылку можно ссылаться в директиве #if preprocessor или в условном атрибуте). Но я не знаю какой-либо всеобъемлющей документации о том, какие именно оптимизаторы включены - на самом деле я подозреваю, что Microsoft захочет свободно повышать свой оптимизатор без уведомления
В документе нет одного документа, в котором перечислены различия. В дополнение к некоторым из уже упомянутых различий компиляция в режиме отладки отключает большинство оптимизаций компилятора JIT, которые выполняются во время выполнения, а также выводит более полную информацию об отладке в файл базы данных символов (.pdb).
Еще одно большое различие заключается в том, что поведение GC несколько отличается тем, что компилятор JIT будет вставлять вызовы GC.KeepAlive() , если это необходимо/необходимо, чтобы поддерживать сеансы отладки.
Я не знаю одного сжатого документа, но:
Отладка и выпуск - это просто метки для разных конфигураций решений. Вы можете добавить других, если хотите. Если вы хотите добавить дополнительные конфигурации из диспетчера конфигурации -
http://msdn.microsoft.com/en-us/library/kwybya3w.aspx
Основные отличия -
1. В debug dll добавлено несколько дополнительных инструкций, чтобы вы могли установить точку останова на каждой строке исходного кода в Visual Studio. Также код не будет оптимизирован, что позволит вам отлаживать код. В версии выпуска эти дополнительные инструкции удаляются.
Файл 2.PDB создается только в режиме отладки, а не в режиме relese.
3. В режиме выпуска cpde оптимизируется оптимизатором, встроенным в JIT-компилятор. Он выполняет следующие оптимизации:
• Вставка метода - вызов метода заменяется введением кода метода.
• Распределение регистров CPU - Локальные переменные и аргументы метода могут оставаться в регистре CPU, но никогда (или реже) не сохраняются в фрейме стека
• Исправление проверки индекса массива - важная оптимизация при работе с массивами (все классы .NET-коллекции используют массив внутри). Когда компилятор JIT может проверить, что цикл никогда не индексирует массив из-за пределов, он устраняет проверку индекса.
• Loop unrolling - Short loops (up to 4) with small bodies are eliminated by repeating the code in the loop body.
• Dead code elimination - A statement like if (false) { /.../ } gets completely eliminated.
• Code hoisting- Code inside a loop that is not affected by the loop can be moved out of the loop.
• Common sub-expression elimination. x = y + 4; z = y + 4; becomes z = x
Одна большая область действия, если вы используете какой-либо элемент управления ASP.NET Ajax: информация об отладке удаляется из библиотеки JavaScript при запуске в выпуске, и я видел основные улучшения преформации на сложных страницах. Другие веб-ресурсы могут быть кэшированы или не кэшированы на основе этого параметра.
Кроме того, помните, что Debug/Release в веб-приложении продиктован файлом web.config
, а не вашими параметрами в Visual Studio.
<system.web>
<compilation debug="true">
Дополнительная информация:
Рисование с помощью GDI + значительно медленнее в режиме отладки.
Версия выпуска:
значительно быстрее (наиболее важно), оптимизировано
нельзя отлаживать (шаг за шагом)
и код, написанный в директиве "debug", не включен
Вы также можете управлять некоторой частью кода, который вы хотите запускать только при отладке или только в выпуске с надстройками-препроцессорами:
#if DEBUG
// Some code running only in debug
#endif
или
#if NOT DEBUG
// Some code running only in release
#endif
Появилось сообщение об ошибке, когда я распространяю исполняемый файл на другой компьютер, указав, что система пропустила MSVCP110D.dll.
Решение этой проблемы указано в вопросе Отсутствует Visual Studio MSVCP110D.dll.
IN XXXXD.dll D означает, что DLL файл является отладочной версией DLL файла. Но распространяемые пакеты MS Visual С++ включают только версию версии DLL файлов.
Это означает, что если вам необходимо распространять программу, разработанную Visual С++, вам нужно ее создать в режиме Release. А также вам нужно установить MS Visual С++ Redistributable (правильная версия) на целевую машину.
Итак, я считаю это одним из ключевых различий между режимом отладки и выпуска.