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 }); }
をそれはおそらく私が忘れている簡単な何かです。権利やユーザー管理と関係しているのでしょうか?
これをブログで読んだり、シンプルなサンプルアプリケーションを提供したりできますか?私はこれがperfテストに非常に役立つと思います。 – RickAndMSFT