在打印这样的消息时,我的调试消息会评估昂贵的字符串操作:
Log.Debug("here it is" + obj.ExpensiveToString())
现在即使日志级别未设置为Debug
,它仍会评估昂贵的字符串操作。
所以不必这样做:
if(debugMode) Log.Debug("here it is" + obj.ExpensiveToString())
或者有很多复杂的Log.Debug()
方法,我该如何解决这个问题?
答案 0 :(得分:3)
使用编译器指令
#if DEBUG
Log.Debug("Here it is: "+obj.ExpensiveToString());
#endif
因为这些指令增加了代码详细程度,所以将它们用于昂贵的部分。
另一种方法是修改或补充您的日志系统以接受Func<string>
public void LogDebug(Func<string> evalMe){
#if DEBUG
if (evalMe!=null)
Log.Debug(evalMe);
#endif
}
然后像这样调用它:
LogDebug(()=>"Here it is: "+obj.ExpensiveToString());