2012-01-25 2 views
1

ASP.NET MVC 3에서 다중 인스턴스 성능 카운터를 작동시키는 데 문제가 있습니다. 단일 인스턴스로 생성하여 다중 인스턴스를 실행하는 중입니다. 간단한 콘솔 응용 프로그램의 perf counter 코드는 잘 작동합니다. 그러나 다중 인스턴스를 만들고 ASP.NET을 사용하여 인스턴스를 늘리려고하면 어려움을 겪습니다.내 ASP.NET MVC 다중 인스턴스 성능 카운터가 작동하지 않는 이유

예외가 없습니다. perf mon에서 측정 결과가 표시되지 않습니다. 그러나 2 개의 인스턴스를 볼 수 있습니다.

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 }); 
    } 

:

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는 다음과 같은 :

은 성능 카운터 범주를 만들 수있는 콘솔 응용 프로그램 코드 아마 내가 잊어 버리는 것은 쉽지 않을 것입니다. 권리 또는 사용자 관리와 관련이있을 수 있습니까?

답변

3

제 동료가 저에게 답을 보내 왔습니다. 기본 카운터의 인스턴스 이름은 평균 카운터의 인스턴스 이름과 동일해야합니다.

이와 같은 문제가 발생하는 경우 가장 먼저 확인하는 것이 좋습니다 ... 많은 시간을 절약 할 수 있습니다.

+1

혹시 블로그를하거나 간단한 샘플 응용 프로그램을 제공 할 수 있습니까? 나는 이것이 perf 테스트에 매우 유용 할 것이라고 생각한다. – RickAndMSFT