代码之家  ›  专栏  ›  技术社区  ›  Shrike

如果类别不存在,则PerformanceCounterCategory.Exists非常慢

  •  3
  • Shrike  · 技术社区  · 16 年前

    因此,我在PerformanceCounter周围创建了包装器,并在第一次使用时检查PerfCounter是否存在。如果它们存在,那么我将使用本机PerformanceCounter,而不是使用不起任何作用的包装器。

    问题是,如果没有这样的类别,那么PerformanceCounterCategory.Exists调用(在我的机器上)大约需要10秒!

    我能做什么?

    自己尝试的代码: 使用系统;

    class Program
    {
        static void Main(string[] args)
        {
            var ts = Stopwatch.StartNew();
            var res = PerformanceCounterCategory.Exists("XYZ");
            Console.WriteLine(ts.ElapsedMilliseconds);
            Console.WriteLine("result:" + res);
    }
    }
    
    2 回复  |  直到 16 年前
        1
  •  6
  •   João Angelo    16 年前

    这似乎是无法避免的。来自MSDN:

    使用Exists方法可能会导致 在一个明显的性能惩罚 而 如果你只是写信给 性能计数器,可以避免 性能计数器的全局搜索 安装应用程序并 访问计数器。 为了避免性能计数器 计数器。

    重点是我的。

        2
  •  0
  •   eduardobr    8 年前

    我的应用程序中的性能计数器设置时间从2:30分钟减少到20秒左右,因为它是作为64位进程执行的。 有趣的是,我只在Windows2012虚拟机中遇到了性能问题。在Windows10中没有问题。

    推荐文章