我正在尝试测量在生产服务器上执行一段代码所需的时间.我想实时监控这些信息,所以我决定给性能分析器一个高手.我从MSDN了解到我需要同时创建一个AverageTimer32和一个AverageBase性能计数器.我在程序中递增计数器,我可以看到CallCount上下移动,但AverageTime始终为零.我究竟做错了什么?
这是一段代码:
long init_call_time = Environment.TickCount;
// ***
// Lots and lots of code...
// ***
// Count number of calls
PerformanceCounter perf =
new PerformanceCounter("Cat", "CallCount", "Instance", false);
perf.Increment();
perf.Close();
// Count execution time
PerformanceCounter perf2 =
new PerformanceCounter("Cat", "CallTime", "Instance", false);
perf2.NextValue();
perf2.IncrementBy(Environment.TickCount - init_call_time);
perf2.Close();
// Average base for execution time
PerformanceCounter perf3 =
new PerformanceCounter("Cat", "CallTimeBase", "Instance", false);
perf3.Increment();
perf3.Close();
perf2.NextValue();
Run Code Online (Sandbox Code Playgroud)
首先,附加到性能计数器非常昂贵,因此您应该尝试使全局实例保持活动状态,而不是每次都打开和关闭它们。
您似乎有正确的想法,这几乎就是我们在性能监控代码中所做的事情。然而,我们不会在更新这些之前立即执行 .NextValue - 所以我会尝试最初停止这样做。
您还确定 Environment.TickCount - init_call_time 不是一个计算结果为 0 的小时间段吗?Environment.TickCount 没有很高的分辨率,System.Diagnostics.Stopwatch 类具有更好的精度。
| 归档时间: |
|
| 查看次数: |
6447 次 |
| 最近记录: |