C#とASP.NETでトレースのパフォーマンスへの影響は何ですか?
-
21-08-2019 - |
質問
私は最近見ていた一部の生産ログインコードでこれを見つけた...
HttpContext.Current.Trace.Write(query + ": " + username + ", " + password));
...クエリが一致するユーザーをつかむために、短いSQLクエリです。これは、パフォーマンスへの影響の任意の並べ替えを持っていますか?私はその非常に小さなを前提とします。
また、HTTPコンテキストを使用して、トレースのこの正確なタイプの目的は何ですか?どこでこのデータは、トレースを取得しますか?事前に感謝します!
解決
はい、それはTRACE条件付きコンパイル定数は、ビルド時に定義されるたびにパフォーマンスへの影響を持つことになります。何かを行うと、インパクトのいくつかの種類があります。)
これは、アプリケーションに重大な影響を有するか否かを判定する。トレースが実行されるように設計されてしまうと、多くの生産アプリケーションで実行されていることを非常に低いです。機能の唯一の乱用は、顕著なパフォーマンスの違いにつながるはずです。
しかし、いつものように、プロファイラを信頼し、私を信用していません。
他のヒント
私はまだコメントの評判ポイントを持っていないが、私はジョナサンの答えについて簡単な文を作りたかったです。私が見てきた数字は、文字列の連結のほんの一握りのためのStringBuilderを使用しても意味がないことを示しているように見えます。連結速度利益を上回るStringBuilderオブジェクトを作成するオーバーヘッド。
のコードのこの作品の中で最もパフォーマンスの損失は、トレースにはありませんが、+演算子を使用して文字列連結インチこれは、パフォーマンスの面でIO操作を打つことができるいくつかの非効率的なメモリ操作を行います。私は(そのことについてまたはString.Formatの)string.Concatようなものか、StringBuilderクラスを使用するように変更したい。
トレースメッセージは、異なる多くの場所に行くことができます。あなたは、少数を示すために、コンソール用のVisualStudioデバッグウィンドウ、ファイル、またはイベントログをTraceListenersを追加(または削除)することができます。あなたも、あなた自身を構築することができます。
また、あなたはリリース用にコンパイル時に何もしないために、トレースを設定することができます。
このように、トレースを使用してのパフォーマンスへの影響は、リスナーがアクティブであるかに応じて、ゼロから完全にアプリを停滞に、乱暴にすべての方法を変えることができます。ほとんどのリスナーは、しかし、あなたが期待影響について持っています。これは、ファイル、またはデータベース、またはコンソールへの書き込みについてとても多くの仕事を取り、トレースは、これらのI / Oバウンド活動への多くのオーバーヘッド相対を追加しません。
とトレースがテキストファイルに書き込んでいる場合、それは私見
を慰めるために書くよりも多くの費用がかかります「トレースが有効になっていないときには無視されるので、トレースが要求に追加のオーバーヘッドを追加し、デプロイされたアプリケーションのために有効にするべきではありません。のTrace.Write()ステートメントは、しかし、中に残すことができます。」
私は、トレースソースがリスナーにメッセージを転送する前にそのスイッチのTraceLevelのを見て思います。私たちはその後、オーバーヘッドをトレースし、「エラー」にスイッチのデフォルトTraceLevelの値を保持する場合のみ、「エラー」のトレースはリスナーに送信されるように大幅に削減されるだろう。
ただの推測...私はまだ何も測定していません。私がしなければ更新します。
2017年の の更新:廃止されるようですが、asp.netアプリケーションにブラウザ/リモートからアクセス.aspxページに情報を/トレースログ記録の非常に便利な方法。
https://msdn.microsoft。 COM / EN-IN /ライブラリ/ z48bew18(V = vs.71).aspxのの