4

私は MVC ミニ プロファイラーを使用しており、「プロファイラー」ロールの認証済みユーザーのプロファイラーのみを表示しています。MiniProfiler.cs で配布されている例では、プロファイリングを停止する必要があるかどうかを判断するために AuthenticateRequest メソッドを使用していましたが、IPrincipal および IsInRole メソッドにアクセスできるように、 (この質問を読んだ後) PostAuthorizeRequest を使用するように切り替えました。PostAuthorizeRequest メソッドでプロファイラーを開始することはできますか? それとも引き続き停止して PostAuthorizeRequest の結果を破棄する必要がありますか? リクエストごとにプロファイラーを開始および停止するためのオーバーヘッドはどれくらいですか?

現在のコード:

public void Init(HttpApplication context)
{
    context.BeginRequest += (sender, e) =>
    {
        MiniProfiler.Start();
    };

    context.PostAuthorizeRequest += (sender, e) =>
    {
        var user = ((HttpApplication)sender).Context.User;

        if (user == null || !user.Identity.IsAuthenticated || !user.IsInRole("Profiler"))
        {
            MvcMiniProfiler.MiniProfiler.Stop(discardResults: true);
        }
    };

    context.EndRequest += (sender, e) =>
    {
        MiniProfiler.Stop();
    };
}

提案されたコード:

public void Init(HttpApplication context)
{
    context.PostAuthorizeRequest += (sender, e) =>
    {
        var user = ((HttpApplication)sender).Context.User;

        if (user != null && user.Identity.IsAuthenticated && user.IsInRole("Profiler"))
        {
            MiniProfiler.Start();
        }
    };

    context.EndRequest += (sender, e) =>
    {
        MiniProfiler.Stop();
    };
}
4

2 に答える 2

6

次の呼び出しを使用して、いつでもプロファイリング結果を破棄できます。

MiniProfiler.Stop(discardResults: true);

StackOverflow での「ハイ パフォーマンス」パターンは次のとおりです。

  1. 許可されたすべての認証済みユーザーに対して「秘密の」Cookie を書き込みます。
  2. Cookie が見つかった場合Application_BeginRequest- MiniProfiler.Start();
  3. PostAuthorizeRequest:

if (MiniProfiler.Current != null && !userReallyAuthenticated) 
    MiniProfiler.Stop(discardResults: true);

あなたの目標は常に、できるだけ早くプロファイリングを開始し、できるだけ遅くプロファイリングを停止することです。パイプラインの途中から開始した場合、ボトルネックが存在する可能性のあるパイプラインの部分はプロファイリングされません。

于 2011-08-29T23:01:56.807 に答える
1

プロファイラーをできるだけ早く開始することが重要だと思います(そうしないと、認証プロセス自体に時間がかかる場合や、一部のHTTPモジュールに問題がある場合など、いくつかの重要な情報が欠落する可能性があります)。

イベントはリクエストで発生する前に発生するためBeginRequest、プロファイリングを開始し、後のステップ(この場合は)でプロファイルデータを保持するかどうかを決定するのに理想的な場所になりPostAuthorizeます。

于 2011-08-29T19:04:51.413 に答える