Почему мой счетчик производительности экземпляра ASP.NET MVC Multi не работает - PullRequest
1 голос
/ 25 января 2012

У меня возникают проблемы при работе нашего счетчика производительности с несколькими экземплярами для работы в 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 });
    }

Наверное, я забываю кое-что простое.Может быть, что-то связано с правами или управлением пользователями?

1 Ответ

3 голосов
/ 25 января 2012

Мой коллега только что прислал мне ответ.Имя экземпляра базового счетчика должно совпадать с именем экземпляра среднего счетчика.

Если вы столкнулись с проблемой, подобной этой, убедитесь, что это первое, что вы проверяете ... может спасти васмного времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...