2009-07-07 3 views
1

どこでストップウォッチを開始するのですか?どこで停止する必要がありますか?ページ作成時間を生成するためのASP.NET MVC実行パイプラインの理解

ストップウォッチを開始する論理的な場所は、コントローラーの操作方法である必要があります。

しかし、どこで時計を停止する必要がありますか?私はそれがマスターページの最後にあると思っていますか?コントローラーのアクションメソッドの最後にウォッチを止めるのは意味がありません。なぜなら、ビューを表示してページをレンダリングするプロセスが追加されるからです。

どのような考えですか?

編集:マスターページ内で経過時間を使用して、ウェブページの時間を取得できます。

ダーリン:コードサンプルをありがとう。しかし、サンプルは私が期待どおりに動作しません。私は、すべてのページに書き込むことができるように、マスターページでelaspsed時間を使う予定でした。

私はマスターページがすでにEndRequestが実行されるまでに読み込まれていると思いますか?

私は設定私のEndRequestので

:参照を取得することができませんでし

Context.Items["PageCreationTime"] = watch.ElapsedMilliseconds.ToString(); 

それから私、私のマスターページはIAM:

<%= HttpContext.Current.Items["PageCreationTime"].ToString()%> 

答えて

3

私はあなたがグローバルでEndRequestのイベントハンドラで最高の場所にそれをしたいthnk .asax。次のようなものがあります。

protected void Application_EndRequest(object sender, EventArgs e) 
{ 
    Stopwatch.Stop(); 
} 

EndRequestイベントは、earch要求の最後で発生します。他の多くのコードでも、その時点で実行してしまうので、(測定したい内容に応じて)遅すぎるかもしれコントローラのアクションでそれを起動する

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    Stopwatch.Start(); 
} 

:あなたは、BeginRequestイベントのEventHandlerであなたのストップウォッチを開始することができます自分で書いたカスタムコード、例えばコントローラアクションにカスタム属性を配置するときに発生します。

+0

ありがとうございます。しかし、私は停止時計にいかがですか?Global.ascxからの経過時間? –

+1

ダーリンはすでに彼の答えを更新していますので、彼のコードを見てください。それを考えると、RedGateのAntzやJitBitsのdotTraceのような*実際の*プロファイラツールを使用する方が良いのではないですか?これらのツールは、ストップウォッチを操作するよりもずっと使いやすく、信頼性があります。ちょうどアイデア! – Razzie

+0

チップをありがとう! –

4

Application.BeginRequestおよびApplication.EndRequestがよい候補である。

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    Stopwatch watch = Stopwatch.StartNew(); 
    Context.Items["watch"] = watch; 
} 

protected void Application_EndRequest(object sender, EventArgs e) 
{ 
    Stopwatch watch = (Stopwatch)Context.Items["watch"]; 
    watch.Stop(); 
    // Do something with the results like for example: 
    Context.Response.Write(watch.ElapsedMilliseconds); 
} 
+0

良い提案ですが、どのようにグローバルクラスからelaspsed timeの値を取得できますか?ストップウォッチの静的変数を宣言すると、これはスレッドセーフではありませんか? –

+0

HttpContextに格納する必要があります。これにより、/要求とスレッドセーフになります。 –

+0

これはasp.netマスターページでは機能しません。 EndRequestが起動されるまでにmsaterpageが既にレンダリングされていると思います。 –

関連する問題