Я написал простой класс для отладки и я называю метод Debugger.WriteLine (...) в своем коде, как это:Вопрос об эффективных лесозаготовках в C#
Debugger.WriteLine("[Draw]", "InProgress",
"[x,y] = " + x.ToString("0.00") +
", " + y.ToString("0.00") +
"; pos = " + lastPosX.ToString() + "x" +
lastPosY.ToString() + " -> " + posX.ToString() +
"x" + posY.ToString() + "; SS = " +
squareSize.ToString() + "; MST = " +
startTime.ToString("0.000") + "; Time = " + time.ToString() +
phase.ToString(".0000") + "; progress = " +
progress.ToString("0.000") + "; step = " +
step.ToString() + "; TimeMovementEnd = " +
UI.MovementEndTime.ToString()
);
Тело процедуры Debugger .WriteLine скомпилируется только в режиме отладки (директивы #if, #endif). Меня беспокоит то, что мне часто требуется ToString() в вызове Debugger.WriteLine, что дорого, потому что он создает все еще новые строки (например, для изменения числа). Как решить эту проблему?
Несколько точек/вопросы отладки/трассировки:
Я не хочу, чтобы обернуть каждый Debugger.WriteLine в операторе IF или использовать директивы препроцессора для того, чтобы оставить из методов отладки, потому что это неизбежно приведет к не очень читаемому коду и потребует слишком большого набора текста.
Я не хочу использовать какие-либо рамки для трассировки/отладки. Я хочу попытаться запрограммировать его сам.
Оставляют ли Trace methods при компиляции в режиме деблокирования? Если это возможно, мои методы будут вести себя одинаково?
С static String.Format method я могу это сделать:
выходом = String.Format ("Вы теперь {0} года.", Года);
Что кажется приятным. Является ли это решением для моей проблемы с ToString()?
Есть ли проблема с производительностью в этом методе? – harpo
@harpo: Создано множество неизменяемых строк. Один вызов не так уж плох, но если этот метод выводится достаточно часто, произойдет замедление из-за всех распределений объектов строки. –
Это называется часто. –