2009-03-18 7 views
1

私はメンテナンスが必要な誰かが書いたWebサイト(ASP.Net 2.0)を継承しました。
コードは恐ろしいものではありませんが、Webサイトを信じられないほど遅くするいくつかの事柄があります。ASP.Netページのグローバルタイミング

私はこれを監視するアイデアがあります。経験豊かな開発者がそのことを考えてみたいです。

私の目的は、ページの読み込みに時間がかかり過ぎるときに、それらのスポットに注意を集中することです。

Global.asaxでPreRequestHandlerExecuteイベントとPostRequestHandlerExecuteイベントをフックし、 "Pre"でStopWatchを作成し、HttpContext.Itemsにアタッチして、 "Post"で読み込み、リクエストがそれ以上行った場合は100msというよりも、私に知らせるために私に報告します。そのため

いくつかの「擬似コードは」次のようになります。

protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e) { 
    System.Diagnostics.Stopwatch theTimer = new Stopwatch(); 
    theTimer.Start(); 
    HttpContext.Current.Items.Add("RequestTimer", theTimer); 
} 

protected void Application_PostRequestHandlerExecute(Object sender, EventArgs e) { 
    Stopwatch theTimer = (Stopwatch) HttpContext.Current.Items["RequestTimer"]; 
    System.Diagnostics.Debug.WriteLine(theTimer.ElapsedMilliseconds + "@: " + HttpContext.Current.Request.RawUrl) 
} 

あなたがこのアプローチをどう思いますか?
これは妥当ですか?
私のウェブサイトをひざまずくようにするつもりですか?
これを行うより良い方法はありますか?

いくつかの考え:
- 私はすべてのページが継承持っている方が良いと思います知っている - DateTime.Now.Ticksを取得し、これはおそらく、ストップウォッチ
より軽いことになるだろう、それを格納する方が良いかもしれ私自身のページから、そしてそこに時間がありますが、私は数十ページを通過してそれらをすべて変更したくありません。

ご意見をいただければ幸いです! ありがとう!

答えて

1

ストップウォッチを使いこなす代わりに、私はちょうどHttpContextコレクションの開始時刻を投げて、それを元に戻します。次に、要求の最後に単純な減算を実行できます。これはパフォーマンスにはほとんど影響しません。

3

tracingを有効にする方がよいでしょう。

+0

そうですが、私はいつもトレースを見たくはありません。私は見つけたボトルネックを修正し、ウェブサイトを稼働させて、特に何かが遅いときに私に電子メールを送ってもらいたい。私はトレースでそれをすることはできません、と私は思います。 –

+0

それは良い点です、あなたはトレースでそれをすることができませんでした。 –

2

私はこれをしません。これは価値があるよりも厄介なことになるでしょう。 CLR ProfilerやRed GateのANTS ProfilerのようなASP.NETのための良いプロファイリングツールがいくつかあります。

+0

プロファイリングの問題は、実行時のパフォーマンスが本当に本当に悪くなることです。このコードを実行して、何かが遅いときに通知するようにしたい。私はプロファイラを付けたライブウェブサイトを持つことができません。 –

+0

はい、私は「生産」コードでこれを行うのが悪いことを知っていますが、すべての正直なところ、私はそれを生産していたので、それについてはあまりできません。 –

+0

特にどのようなトラブルが考えられますか?例外が発生する可能性があると思いますか?他に何か? –

1

BobbyShaftoeが注目したように、プロファイリングが最善の策です。しかし、JetBrainsのdotTraceも考慮してください。それは非常に、非常に良いです。

関連する問題