【发布时间】:2012-01-25 11:12:32
【问题描述】:
我无法让我们的多实例性能计数器在 ASP.NET MVC 3 中工作。将其创建为单个实例可以正常工作,并且在简单的控制台应用程序中运行我们的多实例性能计数器代码也可以正常工作。但是当我创建它的多实例并尝试使用 ASP.NET 增加它时,它似乎很困难。
我没有例外。我在 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 }); }
我可能很容易忘记这件事。也许与权限或用户管理有关?
【问题讨论】:
标签: asp.net-mvc performancecounter