Debug vs Release в оптимизации .net(проблемы при распространении пользователей)

Есть ли проблемы безопасности или производительности при распространении публикации Debug vs Release публике?

В большинстве случаев я просто упаковываю файл .exe в папку Debug (вместе с необходимыми зависимостями) и предоставляю его пользователям.

Есть ли какая-то причина предпочесть больше, чем другой, чтобы распределить?

Ответ 1

Нет проблемы безопасности, о которой я могу думать. Есть, безусловно, проблема с производительностью, сборка Debug ваших сборок содержит атрибут (DebuggableAttribute), который всегда будет препятствовать оптимизации оптимизатора кода оптимизатора дрожания. Это может сильно повлиять на перфоманс программы. Оптимизации, выполняемые джиттером, описаны в этом ответе.

У вас может быть проблема с потреблением памяти. Сборщик мусора будет работать по-разному, сохраняя локальные переменные до конца тела метода. Это угловой случай, и такая проблема должна была быть диагностирована во время тестирования приложения, если вы использовали реалистичные данные.

Специфично для VB.NET, отправка сборки Debug может очень легко привести к сбою вашей программы с OutOfMemoryException, когда она запущена на вашем компьютере пользователя без прикрепленного отладчика. Он не работает из-за утечки в WeakReferences, который используется Edit + Continue для отслеживания классов, у которых есть обработчик событий с ключевым словом WithEvents.

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

Ответ 2

Да, конечно, есть и последствия для безопасности, и производительности.

Отладочные сборки содержат больше информации, чем сборки релизов, и многие оптимизации компилятора отключены для отладочных сборников.

Также см. Отладка/Разница здесь.


Есть ли какая-то причина предпочесть больше, чем другой, чтобы распределить?

Да. Если вы хотите иметь более быструю бинарную версию, которая была скомпилирована с оптимизацией, используйте release.