【发布时间】:2010-10-07 19:07:20
【问题描述】:
给定一个接口
public interface IValueProvider
{
object GetValue(int index);
}
IValueProvider 实例的树结构类似于数学表达式树。 我想在没有外部分析器的情况下测量运行时每个节点的 GetValue 方法所花费的时间。
GetValue 可以做任何我在设计时不知道的事情:从其他 IValueProvider 收集值、运行 IronPython 表达式甚至是外部插件。我想向用户展示有关节点计时的统计信息。
为此,我可以创建一个包装 IValueProvider 的代理类:
public class ValueProviderProfiler : IValueProvider
{
private IValueProvider valueProvider;
public object GetValue(int index)
{
// ... start measuring
try
{
return this.valuepProvider.GetValue(index);
}
finally
{
// ... stop measuring
}
}
}
什么是衡量节点所花费时间的最佳方法,而不会因外部过程造成失真,并且具有良好的准确性并尊重节点并行评估的事实?
仅使用 Stopwatch 类是行不通的,并且查看进程的处理器时间不尊重 CPU 时间可能已在另一个节点上消耗的事实。
【问题讨论】:
标签: c# performance profiling