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

これらのディレクティブはコードの冗長性を高めるため、高価な部分に使用します。

もう 1 つの方法は、ログ システムを変更または補足して、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 に答える