11

私はMVCMiniプロファイラーを使用してアプリケーションの特定の部分の速度をチェックしていますが、後で何かが発生した場合に備えて、「何が問題になっているのか」をチェックする必要がある場合に備えて、そのままにしておきたいと思います。完全なログセットではありませんが、ページの作成に時間がかかる原因を知ることは非常に便利です。

したがって、私の目標は、リクエストに特定のパラメータが含まれている場合にのみ、それを非表示にしてプロファイルを作成することです。しかし、私の試みはどれも私が期待するようには機能しませんでした。

これにより、画面に表示されない(ビュー内のコード)というトリックが実行されました。

@if (Request.QueryString.AllKeys.Contains("showProfiler"))
{ 
    @MvcMiniProfiler.MiniProfiler.RenderIncludes()
}

これが近づいた試みです。ミニプロファイラー情報を正しく非表示にしますが、表示した時点では、表示を停止してからすべてをプロファイリングします。それで、私が私のページをプロファイリングし、それが3秒かかるとしましょう。クエリパラメータを削除して、ページをさらに3回ロードします。パラメータを再度追加すると、4セットのプロファイル情報が表示されます。これは、すべてを追跡していることを意味し、メモリの問題が発生する可能性があるのではないかと思います。

それがもう起こらないようにする試み:

試行1:

protected void Application_BeginRequest()
{
    if (Request.QueryString.AllKeys.Contains("showProfiler"))
    {
        MiniProfiler.Start();
    }
}

試行2:

protected void Application_EndRequest()
{
    MiniProfiler.Stop(!Request.QueryString.AllKeys.Contains("showProfiler"));
}

試行3:

protected void Application_EndRequest()
{
    MiniProfiler.Stop(true);
}

これらはどれも機能しませんでした。何か案は?

4

3 に答える 3

13

プロファイラーのホームページ(「プロファイラーセッションの中止」セクションを参照)には、次の使用パターンがあります。

protected void Application_BeginRequest()
{
   MvcMiniProfiler.MiniProfiler.Start();  
}
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
   if(!CurrentUserIsAllowedToSeeProfiler())
   {
       MvcMiniProfiler.MiniProfiler.Stop(discardResults: true);
   }
}

の実装でCurrentUserIsAllowedToSeeProfilerは、クエリ文字列にプロファイラーをトリガーするキーが含まれているかどうかを確認します。


編集

また、サンプルプロジェクトを見て、特定の状況でプロジェクトを無効にする方法を確認することもできます。彼らのチェックは、ローカルホスト経由でアクセスしているかどうかを確認することですが、もちろん、代わりにクエリ文字列をチェックするように変更することもできます。

それに基づいて、「Attempt#1」がトリックになるはずです。「近い」と「試行#1」の違いは、前者がクエリ文字列を検索しているのprofilingに対し、試行#1はをチェックしていることに注意してくださいshowProfiler。単純なクエリ文字列の取り違えだったのでしょうか。

于 2011-09-29T23:56:10.717 に答える
0

リクエスト開始イベントで通常のようにプロファイラーを起動するだけです。次に、コントローラーまたはビューで、クエリ文字列を確認し、呼び出しMiniProfiler.Stop(true)て、プロファイルされたデータが破棄されないか、falseに設定されている場合は破棄します。

protected void Application_BeginRequest()
{
    MiniProfiler.Start();  
}

次に、あなたの見解では:

@if(!Request.QueryString.AllKeys.Contains("profiling"))
{
    MiniProfiler.Stop(true);
}
于 2011-09-29T23:54:54.310 に答える
0

上記で解決策が見つかりませんでした。

私にとって唯一の解決策は、Web.Configファイルにdebug="false"を設定することでした。

<compilation defaultLanguage="c#" debug="false" batch="false" targetFramework="4.5.2">

これが他の人にも役立つことを願っています。

于 2018-11-05T08:21:00.160 に答える