Подтвердить что ты не робот

Visual Studio - Debug vs Release

Я построил службу Windows, ориентированную на .NET 2.0 в VS 2008. Я запускаю ее как консольное приложение для ее отладки.

Консольное приложение отлично работает. Я поместил его на свой локальный компьютер в качестве службы, скомпилированной в режиме отладки, все еще отлично работаю. Я готов к выпуску сейчас, и вдруг, когда я установил его в режим выпуска, служба компилирует и устанавливает, но ничего не происходит. (Никакой код в обслуживании не запущен вообще).

Я понимаю, что режим отладки и отладки - это параметры конфигурации свойств, но кажется, что в режиме выпуска, даже когда я проверяю определение константы DEBUG, снимите флажок "Оптимизировать код" и установите "Отладочная информация" в "полный", он все еще ничего не делает,

Установите его обратно для отладки, и он снова работает как шарм.

(В качестве побочного элемента я попытался сбросить целевую структуру до 3.5, чтобы убедиться, что это тоже не проблема)

Итак, мои вопросы (в порядке важности) таковы:

  • Будет ли использование моей "отладочной" версии каким-либо образом вызвать какие-либо проблемы?

  • Какие настройки отличаются между отладкой и выпуском, помимо тех трех, которые я уже пытался изменить?

  • Это кажется мне странной ошибкой и вызвало мое любопытство. Любая идея, что может вызвать это?

EDIT: Следует отметить, что я уже использую собственный установщик. В основном я компилирую программу (в отладке или выпуске), а затем устанавливаю ее с соответствующим установщиком.

4b9b3361

Ответ 1

1) Это может быть, если не прямо, так косвенно, делая приложение медленнее и заставляя его использовать больше памяти.

2) Когда он запускается в режиме отладки, есть определенные вещи, которые работают по-другому, например:

  • Код скомпилирован с некоторыми дополнительными инструкциями NOP, так что в начале каждой строки кода есть хотя бы одна команда, чтобы можно было разместить точку прерывания в любой строке.

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

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

  • Исключения содержат больше информации и требуют много времени для обработки при броске.

Все эти различия относительно малы, но они являются фактическими различиями, и они могут иметь значение в некоторых случаях.

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

3) Что касается проблемы с вашей службой, я не знаю, но, похоже, она не связана с тем, как выполняется код в режиме отладки или режиме выпуска. Код запускался бы в любом случае, и если бы это было проблемой с кодом, оно бы разбилось, и вы могли бы увидеть его в журнале событий.

Ответ 2

Я не уверен, что могу поговорить с №1 или №2, но когда у меня были такие проблемы, это было из-за неправильной потоковой передачи /concurrency. Я не уверен, насколько велико ваше приложение, но это может быть хорошим местом для начала.