2012-01-25 7 views
1

ASP.NET MVC 3でマルチインスタンスパフォーマンスカウンタを動作させるのに問題があります。シングルインスタンスとして作成するとうまく動作し、マルチインスタンスを実行します。単純なコンソールアプリのperfカウンタコードもうまく動作します。しかし、私はそれを複数のインスタンスを作成し、ASP.NETを使用してそれを増やそうとすると、闘争につながります。ASP.NET MVCマルチインスタンスパフォーマンスカウンタが動作しない理由

例外はありません。 perf monで測定出力が表示されません。しかし、私は2つのインスタンスを見ることができます。

これは、パフォーマンスカウンタのカテゴリを作成するためのコンソールアプリケーションのコードです:

private const string PERF_COUNTER_CATEGORY_NAME = "MvcPerformance"; 
private const string PERF_COUNTER_BASE_NAME = "MvcAction_Base"; 
private const string PERF_COUNTER_NAME = "MvcAction"; 

static void Main(string[] args) 
{ 
    if (PerformanceCounterCategory.Exists(PERF_COUNTER_CATEGORY_NAME)) 
    { 
     PerformanceCounterCategory.Delete(PERF_COUNTER_CATEGORY_NAME); 
    } 

    CounterCreationDataCollection counters = new CounterCreationDataCollection(); 

    // Add the counter. 
    CounterCreationData avgDuration = new CounterCreationData(); 
    avgDuration.CounterType = PerformanceCounterType.AverageTimer32; 
    avgDuration.CounterName = PERF_COUNTER_NAME; 
    counters.Add(avgDuration); 

    CounterCreationData avgDurationBase = new CounterCreationData(); 
    avgDurationBase.CounterName = PERF_COUNTER_BASE_NAME; 
    avgDurationBase.CounterType = PerformanceCounterType.AverageBase; 
    counters.Add(avgDurationBase); 

    // Create the category. 
    PerformanceCounterCategory.Create(PERF_COUNTER_CATEGORY_NAME, "Performance counters for MVC!", PerformanceCounterCategoryType.MultiInstance, counters); 
} 

そして、ASP.NET MVCアプリで私たちにHomeControllerはこのようなものになります。

private static readonly Random _Random = new Random(); 
    private const string PERF_COUNTER_CATEGORY_NAME = "MvcPerformance"; 
    private const string PERF_COUNTER_BASE_NAME = "MvcAction_Base"; 
    private const string PERF_COUNTER_NAME = "MvcAction"; 
    private static PerformanceCounter _MvcActionCounter = new PerformanceCounter 
    { 
     CounterName = PERF_COUNTER_NAME, 
     CategoryName = PERF_COUNTER_CATEGORY_NAME, 
     ReadOnly = false, 
     InstanceName = "Home_Index", 
    }; 
    private static PerformanceCounter _MvcActionCounterBase = new PerformanceCounter 
    { 
     CounterName = PERF_COUNTER_BASE_NAME, 
     CategoryName = PERF_COUNTER_CATEGORY_NAME, 
     ReadOnly = false, 
     InstanceName = "Home_Index_Base", 
    }; 

    public ActionResult Index() 
    { 
     Stopwatch s = new Stopwatch(); 
     s.Start(); 
     Thread.Sleep(_Random.Next(1000)); 
     s.Stop(); 

     // Increment the performance counters. 
     _MvcActionCounter.IncrementBy(s.ElapsedMilliseconds); 
     _MvcActionCounterBase.Increment(); 
     return View(new HomeViewModel { ElapsedTime = s.Elapsed }); 
    } 

をそれはおそらく私が忘れている簡単な何かです。権利やユーザー管理と関係しているのでしょうか?

答えて

3

私の同僚はちょうど私に答えを郵送しました。ベースカウンタのインスタンス名は、平均カウンタのインスタンス名と同じでなければなりません。

このような問題が発生した場合は、最初に確認したことを確認してください...多くの時間を節約できます。

+1

これをブログで読んだり、シンプルなサンプルアプリケーションを提供したりできますか?私はこれがperfテストに非常に役立つと思います。 – RickAndMSFT

関連する問題