【问题标题】:PerformanceCounter throws exceptionPerformanceCounter 抛出异常
【发布时间】:2012-03-06 13:41:17
【问题描述】:

我必须使用某种技术来获得系统运行时间。由 StackOverflow 中的某个人建议,我使用性能计数器来获取 TimeSpan 中的系统正常运行时间。

            try
            {
                var uptime = new PerformanceCounter("System", "System Up Time");
                uptime.NextValue();
                return TimeSpan.FromSeconds(uptime.NextValue());
            }
            catch (Exception)
            {

            }

它在我的电脑上完美运行,没有任何问题。但是我朋友的电脑出现了问题。在他的 PC 上,运行以下行时抛出异常。

var uptime = new PerformanceCounter("System", "System Up Time");

例外是"Input String was not in Correct format"

【问题讨论】:

  • 不,PerformanceCounter 不会引发 FormatException。考虑删除 try/catch 关键字。
  • @HansPassant,我也相信,直到我发现这个异常,我尝试删除 try/catch,我的应用程序冻结并显示“没有响应”......

标签: c# performancecounter


【解决方案1】:

PerformanceCounter 的行为可能因权限等而有所不同 - 有关此方面的一些信息,请参阅 MSDN

另外一点是,在 Windows XP 中,如果没有配置分页文件,某些性能计数器将不可用(详情请参阅http://support.microsoft.com/kb/884558/en-us)。

一些无关的:

像使用空的catch 块一样“吞下”异常是不好的做法!

【讨论】:

  • 我已经并行尝试了6台以上的电脑,只有那个朋友的电脑抛出了这个奇怪的异常,我不知道为什么。
  • 是的...我已经关注了这些链接,它说明了所有关于许可的内容。我想,我的朋友PC没有代码的必要权限......
  • @jchoudhury 如果权限设置不正确,那么代码将无法工作...更正权限并重试...顺便说一句:请投票/标记为已接受任何有帮助的答案(见meta.stackexchange.com/questions/5234/…)。
  • 你如何看待使用 Environment.TickCount() 而不是性能计数器
  • @jchoudhury 它可能会给你错误的值,因为它是一个 32 位整数,这意味着它会在 24.9 天的正常运行时间后返回到 0(参见 msdn.microsoft.com/en-us/library/…)。
猜你喜欢
  • 2013-05-24
  • 2011-05-30
  • 1970-01-01
  • 2011-02-25
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多