0

在打印如下消息时,我的调试消息会评估昂贵的字符串操作:

Log.Debug("here it is" + obj.ExpensiveToString())

现在,即使日志级别未设置为Debug,它仍会评估昂贵的字符串操作。

所以不必这样做:

if(debugMode) Log.Debug("here it is" + obj.ExpensiveToString())

或者有很多复杂的Log.Debug()方法,我该如何解决这个问题?

4

1 回答 1

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());
于 2013-02-01T15:08:49.600 回答