Режим освобождения vs Debug = "false"

Я пытаюсь найти определенное объяснение того, что эффект компиляции в режиме выпуска имеет в веб-приложении .NET 3.5 по сравнению с debug = "false" . Пока это похоже на то, что настройка debug = "false" имеет тот же эффект, и компиляция в режиме выпуска была обесценена, но я не могу найти никаких убедительных доказательств в этом случае.

Этот вопрос выглядел многообещающим, но, похоже, отвечает на вопрос о том, какая разница между версиями debug и release, а не режимом release и debug = "true": В чем разница между компиляцией debug = "false" и режим выпуска?

Однако он ссылается на эту статью: http://odetocode.com/blogs/scott/archive/2005/11/15/debug-and-release-builds-in-asp-net-2-0.aspx

"Эта новая модель компиляции делает устаревший Configuration Manager для веб-сайта. Единственный вариант, который появляется на веб-сайте Visual Studio 2005, - это конфигурация Debug. Dont fret - это ничего не значит. Файл web.config теперь правила школы".

Теперь это самый близкий мне ответ, и он, похоже, подразумевает, что режим выпуска был обесценен в пользу debug = "false" , но я не могу найти подтверждения этого на MSDN или любом другом источник.

Любая помощь будет принята с благодарностью.

Update

К сожалению, для разъяснения это "проект веб-приложений", о котором я говорю.

Чтобы немного перефразировать мой вопрос, если у меня есть следующий параметр в web.config:

<compilation defaultLanguage="c#" debug="false">

Какой эффект (если таковой имеется) в режиме компиляции режима отгрузки и отладки?

Ответ 1

TL; DR = Более важной является компиляция debug = "true | false". Однако компиляция в Debug также оказывает незначительное влияние на производительность.

Разница между Debug и Release (помимо определения константы DEBUG или нет) - это флаг "Оптимизировать код", который отключен в Debug и включен в Release. (Если вы посмотрите настройки проекта, вставьте вкладку.)

Флаг "Оптимизировать код" сообщает компилятору язык выполнять некоторые оптимизации (например, удаление неиспользуемых переменных и исключение некоторых отладочных символов) при создании DLL. Это относительно небольшое улучшение производительности (возможно, большее влияние на С++ vs С#/VB) и небольшое сокращение использования памяти DLL по сравнению с тем, когда флаг не установлен.

Флаг компиляции debug = "true" сообщает компилятору JIT, что этот код должен быть подключен для отладки. Это снижает производительность в нескольких измерениях (время загрузки, время выполнения, память и загрузка ресурсов), но позволяет отлаживать запущенный код.

Если вы хотите получить более подробные трассировки стека в процессе производства, то, вероятно, вы можете запустить сборку Debug с компиляцией debug = "false" с небольшой разницей в производительности. Но я бы испытал производительность для обоих, чтобы удостовериться, что вы не теряете слишком много.

Кредит относится к этому ответу, который ссылается на эту запись в блоге и Позже я нашел этот, содержащий всю эту информацию.

Ответ 2

Вы должны быть осторожны в выборе слова. Существуют проекты "Веб-приложение" и "Веб-сайт" .

Нет конфигурации "Release" для проектов "Веб-сайт" . Веб-сайты используют только параметр отладки в разделе компиляции web.config. Если вы открываете "Веб-сайт" , обратите внимание, что только указанная конфигурация в "Configuration Manager" - "Debug". Вы можете управлять компиляцией на странице свойств проекта "Параметры MSBuild" или в диалоговом окне "Публиковать веб-сайт".

Конфигурации "Release" и "Debug" работают так, как ожидалось, для проектов "Веб-приложение".

Ответ 3

Идея режима "Release" и "Debug" заключается в том, что в режиме отладки компиляция содержит символы отладки, которые полезны для отладки, но не для производства, поскольку это замедляет процесс.

Однако режим "Release" удаляет эти символы отладки, поэтому процесс работает нормально, без каких-либо проблем.

Теперь Microsoft реализовала вышеупомянутую модель в проектах веб-приложений, в то время как проект веб-сайта немного отличается. Надеюсь, это поможет.

Ответ 4

Вот разница. Если у вас есть это в файле web.config:

<system.web>
    <compilation debug="true" .../>

И вы выберете Release из раскрывающегося списка в Visual Studio (обратите внимание, что они конфликтуют), все будет скомпилировано в режиме отладки или в режиме выпуска?

Visual Studio ничего не знает о компиляции веб-приложения. Создайте веб-приложение и проверьте папку bin, и вы заметите, что он пуст. Это связано с тем, что ASP.NET компилирует его. ASP.NET будет использовать флаг compilation debug из файла конфигурации, чтобы выяснить, как скомпилировать файлы .cs, формы сборки и пользовательские элементы управления и т.д. Он также будет использовать этот флаг для определения того, должен ли он выполнять группировку и минимизацию.

Эта статья подводит итог довольно красиво:

В заключение вы контролируете сборку отладки и выпуска, используя атрибут debug раздела компиляции в web.config - если вы не предварительно скомпилируете веб-сайт с помощью команды "Опубликовать" или "Инструмент развертывания веб-сайта". WSD позволит вам выбрать Debug или Release builds, предварительно скомпилирует сайт и соответствующим образом изменит web.config.