У меня возникают проблемы при работе нашего счетчика производительности с несколькими экземплярами для работы в ASP.NET MVC 3. Создание его как отдельного экземпляра работает нормально, а также работает наш код счетчика производительности с несколькими экземплярами в простом консольном приложении.Но когда я создаю его с несколькими экземплярами и пытаюсь увеличить его с помощью ASP.NET, он начинает бороться.
Я не получаю исключения.Я просто не вижу результатов измерений в пер.Однако я вижу 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);
}
Тогда наш HomeController в приложении ASP.NET MVC выглядит примерно так:это:
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 });
}
Наверное, я забываю кое-что простое.Может быть, что-то связано с правами или управлением пользователями?