Различие в производительности между блоком.NET, созданным в режиме отладки и выпуска?

Вот мое решение, которое предполагает проверку wp-content

# Ignore everything except directories
*
!*/

# except everything in the child theme and its required plugin
!/themes/mytheme-child/**
!/plugins/my-plugin/**

# and this file
!.gitignore

и тестирование:

git version 2.20.1 (Apple Git-117)
$ git check-ignore -v .foo foo foo/ themes/foo themes/foo/bar themes/mytheme-child \
themes/mytheme-child/foo plugins/foo plugins/my-plugin plugins/my-plugin/foo .gitignore
.gitignore:2:*  .foo
.gitignore:2:*  foo
.gitignore:2:*  foo/
.gitignore:2:*  themes/foo
.gitignore:2:*  themes/foo/bar
.gitignore:2:*  themes/mytheme-child
.gitignore:6:!/themes/mytheme-child/**  themes/mytheme-child/foo
.gitignore:2:*  plugins/foo
.gitignore:2:*  plugins/my-plugin
.gitignore:7:!/plugins/my-plugin/** plugins/my-plugin/foo
.gitignore:10:!.gitignore   .gitignore

, поэтому оно корректно игнорирует все, что я не хочу, и ничего, что я хочу сохранить.

Выпуск кода

Gitlab настроен с зеркалами репозитория для защищенных веток, в соответствии с https://docs.gitlab.com/ee/workflow/repository_mirroring.html

Когда код передается в защищенную ветвь, он будет зеркально отражен на промежуточных промежуточных и производственных серверах в голом репо /opt/checkout/repo.git/. Следующий хук post-receive/opt/checkout/repo.git/hooks/post-receive) затем извлечет код в рабочий каталог.

#!/bin/bash

BRANCH=staging
GIT_DIR=/opt/checkout/repo.git
GIT_WORK_TREE=/opt/bitnami/apps/wordpress/htdocs/wp-content

# on push, checkout the code to the working tree
git checkout -f "${BRANCH}"

# ensure permissions are correct
sudo chown -R bitnami:daemon "${GIT_WORK_TREE}"
sudo chmod -R go-w "${GIT_WORK_TREE}"

Для получения дополнительной информации см. https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps

14
задан Jim 19 May 2009 в 17:12
поделиться

7 ответов

У меня был тот же вопрос около года назад, потому что у нас были серьезные проблемы с производительностью в производственной среде. Как мне объяснили в службе поддержки MS Premier, версии отладочной сборки включают перехватчики для отладки, которые могут привести к увеличению потребления памяти примерно на 1-10% в зависимости от того, что делает приложение.

Если у вас нет проблем, оставьте их. в одиночку, но если у вас возникли проблемы с потреблением памяти, перекомпилируйте / разверните.

17
ответ дан 1 December 2019 в 08:53
поделиться

If you look at the IL code generated for Debug and Release builds the differences are generally quite small. Most of the differences lie in additional nop commands at key source points to support Edit and Continue and source line debugging. However when the .NET runtime actually JITs the MSIL the runtime assembly is almost identical. The biggest difference comes when a debugger is attached. That will prevent the JIT from optimizing the actual running code.

Release versions are often much smaller as well because they just don't include as much code. There's can be patches of code surrounded with #if DEBUG statements as well as Conditional attributes that instruct the compiler to omit calls to methods in release mode (Like Debug.WriteLine).

I've found that the Debug.WriteLine and Trace.WriteLine methods, when left in production code and have a significant performance implications even if a debugger is not attached.

4
ответ дан 1 December 2019 в 08:53
поделиться

По моему опыту, я заметил разницу в 30-40%. Это было с DotNetZip , библиотекой, которая выполняет шифрование, сжатие и небольшой ввод-вывод файлов. Более 85% времени было потрачено на шифрование и сжатие, просто на перемещение байтов.

6
ответ дан 1 December 2019 в 08:53
поделиться

Стоит отметить, что код выпуска также удаляет некоторые вещи препроцессора, например:

#if DEBUG
...
#endif

Он также удаляет Debug.WriteLine, Debug.Assert и некоторые другие вещи в пространстве имен System.Diagnostics, которые могут быть полезны при тестировании, но бессмысленны в хорошо разработанном коде для сборки выпуска.

2
ответ дан 1 December 2019 в 08:53
поделиться

Обычно вы увидите преимущество, потому что версия выпуска обычно компилируется с оптимизацией с использованием параметра компилятора / optimize . Однако насколько большая будет разница, будет зависеть от вашей конкретной сборки - вам нужно будет профилировать.

1
ответ дан 1 December 2019 в 08:53
поделиться

Я обнаружил, что разница в производительности растет экспоненциально с увеличением сложности кода - простое приложение может видеть разницу только на 5%, но я видел до 50% замедления в сложных приложениях, особенно в тех, которые включают в себя более крупные структуры данных, такие как массивы или карты.

Конечно, есть вероятность, что код отладки также может немного отличаться в зависимости от того, как вы настроены - посмотрите, например, на утверждения.

1
ответ дан 1 December 2019 в 08:53
поделиться

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

0
ответ дан 1 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: