net - c# remove html tags from string




Отладка и производительность релиза (6)

Я столкнулся с следующим абзацем:

«Отладка против версии Release в среде IDE при компиляции вашего кода в Visual Studio практически не влияет на производительность ... сгенерированный код почти такой же. Компилятор C # на самом деле не делает никакой оптимизации. Компилятор C # просто выплевывает IL ... и во время выполнения JITer выполняет всю оптимизацию. У JITer есть режим Debug / Release, и это имеет огромное значение для производительности. Но это не говорит о том, запускаете ли вы настройку Debug или Release вашего проекта, чтобы эти ключи отключились от присоединения отладчика ».

Источник here и подкаст here .

Может ли кто-нибудь направить меня в статью Microsoft, которая может это доказать?

Googling « C # debug vs release performance » в основном возвращает результаты, говорящие: « Отладка имеет большой успех », « версия оптимизирована » и « не развертывайте debug to production ».


В msdn сайте ...

Конфигурации отладки и отладки

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

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


В значительной степени это зависит от того, связано ли ваше приложение с вычислением, и это не всегда легко сказать, как в примере Лассе. Если у меня есть малейший вопрос о том, что он делает, я несколько раз останавливаю его и просматриваю стек. Если есть что-то дополнительное, что мне действительно не нужно, это сразу видно.


Недавно я столкнулся с проблемой производительности. Полный список продуктов занимал слишком много времени, около 80 секунд. Я настроил БД, улучшил запросы и не было никакой разницы. Я решил создать TestProject, и я узнал, что тот же процесс был выполнен за 4 секунды. Затем я понял, что проект находится в режиме Debug, и тестовый проект был в режиме Release. Я переключил основной проект в режим Release, и полный список продуктов занял всего 4 секунды, чтобы отобразить все результаты.

Реферат: Режим отладки намного медленнее, чем режим запуска, поскольку он сохраняет информацию об отладке. Вы всегда должны развертываться в режиме Relase. У вас все еще есть отладочная информация, если вы включаете файлы .PDB. Таким образом, вы можете регистрировать ошибки с номерами строк, например.


Нет статьи, которая «доказывает» что-либо о вопросе производительности. Способ доказать утверждение о влиянии изменения производительности заключается в том, чтобы попробовать его в обоих направлениях и проверить его в условиях реалистичного управления.

Вы задаете вопрос о производительности, так что вы явно заботитесь о производительности. Если вы заботитесь о производительности, то правильная вещь - установить некоторые цели производительности, а затем написать себе набор тестов, который отслеживает ваш прогресс в отношении этих целей. После того, как у вас есть такой набор тестов, вы можете легко использовать его, чтобы проверить для себя истину или ложность таких утверждений, как «сбор отладки медленнее».

И, кроме того, вы сможете получить значимые результаты. «Медленнее» бессмысленно, потому что неясно, будет ли это на одну микросекунду медленнее или на двадцать минут медленнее. «10% медленнее в реальных условиях» более значим.

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


То, что вы читаете, вполне допустимо. Выпуск обычно более обеднен из-за оптимизации JIT, не включая код отладки (#IF DEBUG или [Условный («DEBUG»)]), минимальная загрузка символа отладки и часто не рассматривается - это меньшая сборка, которая уменьшит время загрузки. Производительность отличается более очевидной при запуске кода в VS из-за более обширного PDB и символов, которые загружаются, но если вы запускаете его самостоятельно, различия в производительности могут быть менее очевидными. Определенный код будет лучше оптимизирован, чем другие, и он использует те же оптимизирующие эвристики, что и на других языках.

У Скотта есть хорошее объяснение оптимизации встроенного метода here

См. Эту статью, в которой приводится краткое объяснение, почему в среде ASP.NET она отличается от параметров отладки и выпуска.


Частично верно. В режиме отладки компилятор испускает символы отладки для всех переменных и компилирует код как есть. В режиме выпуска включены некоторые оптимизации:

  • неиспользуемые переменные вообще не компилируются
  • некоторые переменные цикла вынимаются из цикла компилятором, если они доказаны как инварианты
  • код, написанный под директивой #debug, не включен и т. д.

Остальное зависит от JIT.

Редактировать: Полный список оптимизаций here предоставлен Эриком Липпертом





release