类别不存在。在为 Ram 使用创建性能计数器时

Posted

技术标签:

【中文标题】类别不存在。在为 Ram 使用创建性能计数器时【英文标题】:Category does not exist. While Creating performance counter for Ram usage 【发布时间】:2016-09-06 11:18:21 【问题描述】:

这是代码,我正在尝试运行以获取内存使用情况。

int main(array<System::String ^> ^args)

    PerformanceCounter^ ramCounter;
    try
    
        Console::WriteLine(L"Hello World");
        ramCounter = gcnew PerformanceCounter("Memory", "Available MBytes");
        Console::WriteLine(L"Memory usgae:"+ramCounter->NextValue()+L"MB");
    
    catch(Exception^ e)
    
        Console::WriteLine("Error Message: "+e->Message);
        Console::WriteLine(e->StackTrace);
    
    finally
    
        if(ramCounter!=nullptr)
        
            ramCounter->Close();
        
        Console::WriteLine("Press any key to exit");
        Console::ReadLine();
    
    return 0;

但是我遇到了异常

错误信息:类别不存在。

错误消息堆栈跟踪: 在 System.Diagnostics.PerformanceCounterLib.CounterExists(字符串 机器,字符串类别,字符串计数器)在 System.Diagnostics.PerformanceCounter.InitializeImpl() 在 System.Diagnostics.PerformanceCounter..ctor(字符串类别名称, 字符串计数器名称,字符串实例名称,布尔只读)在 System.Diagnostics.PerformanceCounter..ctor(字符串类别名称, 字符串 counterName) 在 main(String[] args) 中 c:\用户\文档\视觉工作室 2012\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp:line 31

关于这个的任何想法..

【问题讨论】:

这可能对你有帮助social.msdn.microsoft.com/Forums/vstudio/en-US/… 您确定这是 C#(如标签中所述)吗?在我看来更像 C++。 @GoodNightNerdPride 这是微软 C++ 的一个特殊“版本”,c++/cli。 【参考方案1】:

这可能是本地化问题。在我的机器上,您的代码也不起作用,因为它的语言是德语。因此我不得不用

创建计数器
 gcnew PerformanceCounter("Arbeitsspeicher", "Verfügbare MB")

您可以通过浏览Performance Monitor 中的可用性能计数器找到本地化名称。

还有一种以独立于语言的方式检索计数器数据的方法。详情请见this answer。

【讨论】:

以上是关于类别不存在。在为 Ram 使用创建性能计数器时的主要内容,如果未能解决你的问题,请参考以下文章

RawFraction 性能计数器即使在删除性能类别后仍保持其状态

创建性能计数器 PowerShell:指定类别的计数器布局无效

创建的性能计数器不可见

在服务中删除和创建性能计数器时,它可能会挂起该服务

Windows 性能计数器限制

OMS 逻辑磁盘性能计数器不存在磁盘实例名称