我需要记录任务所花费的时间,并且我已经建议使用Windows性能计数器。
我需要记录解决给定MathProblem所需的时间。 Solve方法第一行将启动StopWatch,最后一行将Stop Stop。
当我记录解决问题所需的时间时,我需要记录时间以及ProblemId(一个字符串)。
性能计数器可以使用这样的记录数据吗? perfmon图是否会与一个标识符一起绘制时间?所以当我点击或将鼠标悬停在图表上时,它会显示ProblemID?
提前致谢
public class MathProblem
{
public string ProblemID;
public void Solve()
{
StopWatch sw = StopWatch.StartNew();
sw.Stop();
//Log to performance counter with ProblemID
}
}
答案 0 :(得分:0)
不,如果要为每个问题ID分隔计数器,系统性能计数器不适用于这种情况。虽然实例类别可以跟踪每个实例的单独计数器,但显示可以显示每个类别的计数器和_Total(这是您在代码中创建的聚合类别,并确保将所有单个实例添加到_Total) ,这个基础架构是为相当稳定的实例设计的,最易变的例子是一个进程。如果您的ProblemID经常出现并消失(即,ID非常不稳定,每小时更换几次),那么在perfmon基础设施下跟踪这种波动就不行了。客户端获取实例名称的快照,然后查找该实例名称空间中的更改,因此如果名称是易失性的,则所有客户端基本上都不会跟踪任何内容:将跟踪在捕获快照时发生的某些ProblemId,因此,快照实例将消失,并且不会捕获任何新实例。
答案 1 :(得分:0)
请原谅我,如果这看起来像一个简单的方法,但是对于它的价值(并且基于Remus的信息,perfmon不会做你想要的),我总是通过将结果写入{{}来解决这类问题。 {3}}文件。然后可以将其直接导入Excel,Excel将以最合适的方式分析和绘制数据。当然,任何其他电子表格程序都可以使用。
通过这种方式,您可以获得复杂的分析功能,而无需为创建文本文件而编写代码;除非你想在Excel中编写一些VBA来帮助处理数据。
我可能误解了您的要求,但您可以将结果附加到有效的日志文件(CSV格式)中,并且每次运行程序时都会添加到该文件中,这会产生或多或少相同的效果。创建性能计数器数据点。
如果您想要更复杂,您当然可以使用更复杂的解决方案将结果直接注入Excel工作表。