使用其他语言检索PerformanceCounter类别

时间:2013-07-09 23:35:45

标签: c# performancecounter

当我显示所有PerformanceCounterCategories的列表时,我会收到一份荷兰语列表,因为这是我的操作系统语言。是否可以检索英文列表?

private static void Main(string[] args) {
        var cats = new List<PerformanceCounterCategory>(PerformanceCounterCategory.GetCategories());

        foreach (var name in cats.OrderBy(x => x.CategoryName)) {
            Console.WriteLine(name.CategoryName);
        }

        Console.ReadKey();
}

编辑: 除此之外,是否有可能的类别列表及其在线计数器?我一直在寻找高低,并没有偶然发现一个真实的清单。

到目前为止,我发现的唯一一件事就是this文章,它引出了一系列类别。 但是,由于它没有提供关于类别本身的任何信息,我已经收到一个例外,说明当我使用时该类别不存在

var temp = new PerformanceCounterCategory("IP");
Console.WriteLine(temp.CategoryHelp);

1 个答案:

答案 0 :(得分:2)

由于它显然使用Thread.CurrentCulture,您无法指定用于检索所有内容的语言。可能可以安装英语语言包并更改您的CurrentCulture,但我没有遵循可能性。

相反,有英语操作系统的人向我提供了上面result的代码,我将使用它作为硬编码英语类别的参考,而不是荷兰语。英语似乎对我来说很好,所以我猜它是每台机器上的标准。

我还没有找到有关类别的实际文档,但通过使用常识,我能够将these technet文章与上面链接列表中显示的相应类别结合起来。

确保其有效的示例:

 var temp = new PerformanceCounter("IPv4", "Datagrams/sec");
 console.WriteLine(temp.CategoryName);

 while (true) {
      float total = 0;
      for (var i = 0; i < 10; i++) {
              total += temp.NextValue();
      }
      Console.WriteLine(total);
      Thread.Sleep(1000);
 }

为我提供源源不断的数据,即使Technet上的文档仅将类别指定为“IP对象”而不区分“IPv4”和“IPv6”。

如果某人确实找到了解决原始问题的可靠方法(尽管主机系统的偏好显示所有英文类别),只需将其添加为答案,我会接受。

编辑: 通过更改CurrentCulture

的解决方案
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
            var cats = new List<PerformanceCounterCategory>(PerformanceCounterCategory.GetCategories());
            foreach (var name in cats.OrderBy(x => x.CategoryName)) {
                Console.WriteLine("en-US: " + name.CategoryName);
            }

            System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("nl-NL");
            cats = new List<PerformanceCounterCategory>(PerformanceCounterCategory.GetCategories());
            foreach (var name in cats.OrderBy(x => x.CategoryName)) {
                Console.WriteLine("nl-NL: " + name.CategoryName);
            }