在打印如下消息时,我的调试消息会评估昂贵的字符串操作:
Log.Debug("here it is" + obj.ExpensiveToString())
现在,即使日志级别未设置为Debug
,它仍会评估昂贵的字符串操作。
所以不必这样做:
if(debugMode) Log.Debug("here it is" + obj.ExpensiveToString())
或者有很多复杂的Log.Debug()
方法,我该如何解决这个问题?
在打印如下消息时,我的调试消息会评估昂贵的字符串操作:
Log.Debug("here it is" + obj.ExpensiveToString())
现在,即使日志级别未设置为Debug
,它仍会评估昂贵的字符串操作。
所以不必这样做:
if(debugMode) Log.Debug("here it is" + obj.ExpensiveToString())
或者有很多复杂的Log.Debug()
方法,我该如何解决这个问题?
使用编译器指令
#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());