【问题标题】:Why is my ASP.NET MVC Multi instance Performance counter not working为什么我的 ASP.NET MVC 多实例性能计数器不起作用
【发布时间】: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


    【解决方案1】:

    我的一位同事刚刚给我邮寄了答案。基本计数器的实例名称必须与平均计数器的实例名称相同。

    如果您遇到这样的问题,请确保这是您检查的第一件事......可以为您节省大量时间。

    【讨论】:

    • 你有没有机会写博客或者为我提供一个简单的示例应用程序?我认为这对性能测试非常有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2017-03-12
    • 2020-08-14
    • 2016-08-22
    • 2021-06-07
    • 2020-05-15
    • 1970-01-01
    相关资源
    最近更新 更多