Есть ли снижение производительности с Debug.WriteLine (ex); заявление, когда выйдет версия моего приложения - PullRequest
0 голосов
/ 04 июля 2018

Я использую эту конструкцию:

 catch (Exception ex)
 {
    Debug.WriteLine(ex);
    db2.Rollback();
    throw;
 }

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

Ответы [ 5 ]

0 голосов
/ 04 июля 2018

Обновлено для компилятора Roslyn:

Debug.WriteLine зависит от того, определен ли символ компилятора DEBUG и включен ли «Оптимизация». Обычно a Конфигурация выпуска не имеет определенного символа компилятора DEBUG, а для оптимизаций установлено значение True.

Код:

Console.WriteLine("Hello World!");
Debug.WriteLine("Hello World!");
Console.WriteLine("Hello World!");

Debug символ не определен, оптимизация: False

IL_0000:  ldstr      "Hello World!"
IL_0005:  call       void [mscorlib]System.Console::WriteLine(string)
IL_000b:  nop
IL_000a:  ldstr      "Hello World!"
IL_000f:  call       void [mscorlib]System.Console::WriteLine(string)

Но при включенной оптимизации NOP удаляется.

Debug символ не определен, оптимизация: True

IL_0000:  ldstr      "Hello World!"
IL_0005:  call       void [mscorlib]System.Console::WriteLine(string)
IL_000a:  ldstr      "Hello World!"
IL_000f:  call       void [mscorlib]System.Console::WriteLine(string)

Debug символ определен, оптимизация: False:

IL_0001:  ldstr      "Hello World!"
IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
IL_000b:  nop
IL_000c:  ldstr      "Hello World!"
IL_0011:  call       void [System]System.Diagnostics.Debug::WriteLine(string)
IL_0016:  nop
IL_0017:  ldstr      "Hello World!"
IL_001c:  call       void [mscorlib]System.Console::WriteLine(string)
0 голосов
/ 04 июля 2018

Он игнорируется, когда приложение запускается в режиме выпуска, поэтому нет проблем с производительностью, в режиме выпуска Trace.Debuge является выбором

0 голосов
/ 04 июля 2018

При компиляции релиза компилятор удаляет весь ненужный код (комментарии / отладка / разрывы строк).

0 голосов
/ 04 июля 2018

Из документации Microsoft на Debug:

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

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

0 голосов
/ 04 июля 2018

Уверен, это полностью игнорируется. При запуске приложения в выпуске сообщения отладки не отображаются в консоли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...