3

MVC3アプリケーションにMiniProfilerを使用したいので、ScottHanselmanのブログ投稿をフォローしました。

私のGlobal.asax.csファイルには、ソースのMVCサンプルのように必要な変更が加えられています。

しかし、コントローラーで特定の呼び出しを測定したいと思います。だから私はこのコードをコントローラーに入れました:

if (Request.IsLocal)
{
    var profiler = MiniProfiler.Current;
    using (profiler.Step("SelectUserDetail Function"))
    {
        user = UserService.SelectUserDetail(userId);
    }
}

Request.IsLocalこのブロックをチェックでラップしているので、コードが本番環境に存在することはないと思います。

ローカルコールのみ、またはデバッグモードで実行している場合にのみ、このチェックを行うにはどうすればよいですか?いずれにせよ、user = UserService.SelectUserDetail(userId)ステートメントを実行する必要があります。

4

2 に答える 2

3

私があなたの質問を正しく理解しているなら、あなたはローカルで実行しているとき(またはデバッグしているとき)にMiniProfilerの.Step()拡張メソッドを呼び出したいだけですよね?

もしそうなら、これは、プロダクションに影響を与えることなく、このすべてのインストルメンテーションをプロダクションコードで利用できるようにするというMiniProfilerの目的をやや打ち負かします。

私はあなたがあなたのコードでこれを簡単に行うことができると確信しています:

using (MiniProfiler.Current.Step("SelectUserDetail Function"))
{
    user = UserService.SelectUserDetail(userId);
}

そしてそれはあなたのアプリに実質的に影響を与えません。私たちは文字通り、スタックオーバーフローのコードでこれを何百回も問題なく実行します(すべてのデータベースクエリも同様です)。

新しいリクエストが届いたときにのみチェックを行う必要があります。

protected void Application_BeginRequest()
{
    if (Request.IsLocal) { MiniProfiler.Start(); }
}

MiniProfiler.Current.Step()プロファイラーはnull(拡張メソッドの美しさ)であるため、本番環境で実行している場合、への呼び出しは何も返しません。

それでもステートメントが本番コードに表示されないようにする場合は、プリプロセッサディレクティブusingに精通している必要があります。この質問も参照してください。ただし、この目的は必要ないので、強くお勧めします。

于 2013-01-23T20:54:17.163 に答える
-1

私は通常、DebugHelper静的クラスのようなものを作成し、そこで定義します。

public static class DebugHelper
        {
            private static bool? _isDebugEnabled = false;
            public static bool IsDebug
            {
                get
                {
                    if (!_isDebugEnabled.HasValue)
                    {
                        _isDebugEnabled = false;
    #if DEBUG
                        _isDebugEnabled = true;
    #endif
                    }
                    //may be extra rules like   check for some debug key in HttpContext.Current etc.
                    return _isDebugEnabled.Value;
                }
                set { _isDebugEnabled = value; }
            }

            public static bool IsDevEnvironment
            {
                get
                {
                    string environment = settingsService.GetSettingByKey<string>("environment");
                    return environment == "dev";
                }
            }
            public static bool IsTestEnvironment
            {
                get
                {
                    string environment = settingsService.GetSettingByKey<string>("environment");
                    return environment == "test";
                }
            }

DebuHelperを使用すると、デバッグモード、ロギング、トレースなどを簡単にオン/オフに切り替えることができます。開発環境やテスト環境用に出力などを追加できます。

于 2015-11-09T14:07:20.690 に答える