【问题标题】:Can Performance Counters track time taken along with a string idenitifer?性能计数器可以与字符串标识符一起跟踪时间吗?
【发布时间】:2010-08-25 22:41:11
【问题描述】:

我需要记录一个任务所花费的时间,并且有人建议我使用 Windows 性能计数器。

我需要记录解决给定数学问题所花费的时间。 Solve 方法的第一行将启动 StopWatch,最后一行将停止它。

当我记录解决问题所花费的时间时,我需要记录时间以及 ProblemId(一个字符串)。

性能计数器可以像这样使用记录数据吗? perfmon 图会与标识符一起绘制时间吗?所以当我单击或将鼠标悬停在图形点上时,它会显示 ProblemID?

提前致谢

public class MathProblem
{
    public string ProblemID;

    public void Solve()
    {
        StopWatch sw = StopWatch.StartNew();

        sw.Stop();
        //Log to performance counter with ProblemID
    }
}

【问题讨论】:

    标签: c# performancecounter


    【解决方案1】:

    不,如果您想根据问题 ID 分隔计数器,则系统性能计数器不适用于这种情况。确实,实例化类别可以跟踪每个实例的单独计数器,并且显示可以显示每个类别和 _Total 的计数器(这是您在代码中创建的聚合类别,并确保您将所有单个实例也添加到 _Total) , 这个基础设施是为相当稳定的实例设计的,最不稳定的例子是进程。如果您的 ProblemID 频繁出现和消失(即,ID 非常不稳定,每小时更改次数超过几次),在 perfmon 基础架构下跟踪这种波动是行不通的。客户端获取实例名称的快照,然后在该实例名称空间中查找更改,因此如果名称是可变的,所有客户端将基本上不跟踪任何内容:将跟踪捕获快照时恰好存在的一些 ProblemId,然后仅此而已,因为快照实例将消失并且不会捕获新实例。

    【讨论】:

      【解决方案2】:

      如果这看起来像一个简单的方法,请原谅我,但对于它的价值(并且基于 Remus 的信息,perfmon 不会做你想要的),我总是通过将结果写入 @ 987654321@ 文件。然后可以将其直接导入 Excel,Excel 将以最合适的方式分析和绘制数据。当然,任何其他电子表格程序都可以使用。

      通过这种方式,您无需编写任何代码即可获得复杂的分析功能,而无需创建文本文件;除非您想在 Excel 中编写一些 VBA 来帮助处理数据。

      我可能误解了您的要求,但您可以将结果附加到有效的日志文件(CSV 格式)中,并在每次运行程序时简单地添加到该文件中,这或多或少与创建性能计数器数据点。

      如果你想变得更复杂,你当然可以用更复杂的解决方案将结果直接注入 Excel 工作表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-01
        • 2012-05-18
        • 1970-01-01
        • 2020-12-10
        • 1970-01-01
        • 1970-01-01
        • 2015-02-02
        • 1970-01-01
        相关资源
        最近更新 更多