web-dev-qa-db-ja.com

.NET / Visual StudioでTRACE定数を定義する

Visual Studio 2010では、プロジェクトのプロパティに移動して[ビルド]タブに移動すると、[TRACE定数の定義]のチェックボックスがあります。これは、#define TRACEを実行するのと同じです。

System.Diagnostics.Traceのすべてのメソッドには、[Conditional("TRACE")]があります。

私の質問はなぜこれをオフにすることですか?つまり、定義されているトレースリスナーがない場合は、ログなどをいっぱいにするつもりではありません。それは私には奇妙に感じます。 Traceを呼び出す努力をしているなら、なぜApp/Web.configを介して制御するのではなく、コンパイラスイッチを介して制御したいのですか?再コンパイル。

何か不足していますか?確かに、それはパフォーマンスにとってそれほど悪いことではありませんよね?

43
aquinas

おそらく、このチェックボックスは/define:TRACEコンパイラオプションと同等です。エンドユーザーになんらかの理由(セキュリティなど)でトレース出力を表示させないため、またはパフォーマンスを向上させるために、リリースビルドでこのオプションをオフにすることができます。もちろん、パフォーマンスの向上は、オンになっているときに実行されている作業量に依存しますが、 条件属性 は、コンパイラーから関数呼び出し(文字列のフォーマットなどを含む)を完全に削除します生成されたILなので、できますが大きな違いを生みます。

34