c# 统计方法执行时间,计算缓存读取数据方法的命中率
2008-05-06 08:58
766 查看
一. 构造StopwatchPool
在System.Diagnostics命名空间中dot net framework为我们提供了精确计算代码执行时间的类Stopwatch;因为我们可能频繁使用Stopwatch类的实例,所以我们在此做一个简单的对象池,尽量降低非方法执行时间对程序性能的影响。
在StopwatchPool类的静态字段List<StopwatchWithUseState> _watchList中包含了系统中初始化好的StopwatchWithUseState实例;StopwatchWithUseState 实例中是Stopwatch的实例,和一个它是否正在被使用的字段。当需要新的Stopwatch实例使直接调用StopwatchPool的静态方法NewStopwatch()即可,注意在使用完Stopwatch实例之后需要调用ReleaseWatch(Stopwatch)释放掉Stopwatch。具体代码会在文章结尾给出,其类图如下:
[Conditional(EnablePerfMonitor.CompilerSymbal)]
public virtual void EnterMethod()
[Conditional(EnablePerfMonitor.CompilerSymbal)]
public virtual void FinishMethod()
大家可以看到在两个方法的前面都使用了Conditional特性,这样可以在编译时方便的启用或者禁用方法执行时间统计。
在这个类中还提供了一个静态方法RegisterMonitor(string methodFullName)这个方法会返回一个MethodPerfMonitor类的实例,若该类的静态字段_methodMonitorTable中有方法全名对应的MethodPerfMonitor实例,则直接返回,否则将新生成的实例保存在该类的一个静态字段中。这样保证一个实例对应一个方法的统计。
三. 统计缓存方法的执行时间和缓存命中率
我们需要一个新的类来统计方法的缓存命中情况,CachableMethodPerfMonitor该类从MethodPerfMonitor继承,该类只多了一个功能统计缓存的命中率;在方法执行结束时执行FinishMethod时需要指定这一次执行是否命中了缓存。并添加方法执行时间和缓存命中时的执行时间。其关键实现如下:
[Conditional(EnablePerfMonitor.CompilerSymbal)]
public void FinishMethod(bool isHitCache)
四. 如何使用
请看如下实例代码。有问题欢迎提出。
相关源码下载
在System.Diagnostics命名空间中dot net framework为我们提供了精确计算代码执行时间的类Stopwatch;因为我们可能频繁使用Stopwatch类的实例,所以我们在此做一个简单的对象池,尽量降低非方法执行时间对程序性能的影响。
在StopwatchPool类的静态字段List<StopwatchWithUseState> _watchList中包含了系统中初始化好的StopwatchWithUseState实例;StopwatchWithUseState 实例中是Stopwatch的实例,和一个它是否正在被使用的字段。当需要新的Stopwatch实例使直接调用StopwatchPool的静态方法NewStopwatch()即可,注意在使用完Stopwatch实例之后需要调用ReleaseWatch(Stopwatch)释放掉Stopwatch。具体代码会在文章结尾给出,其类图如下:
[Conditional(EnablePerfMonitor.CompilerSymbal)]
public virtual void EnterMethod()
[Conditional(EnablePerfMonitor.CompilerSymbal)]
public virtual void FinishMethod()
大家可以看到在两个方法的前面都使用了Conditional特性,这样可以在编译时方便的启用或者禁用方法执行时间统计。
在这个类中还提供了一个静态方法RegisterMonitor(string methodFullName)这个方法会返回一个MethodPerfMonitor类的实例,若该类的静态字段_methodMonitorTable中有方法全名对应的MethodPerfMonitor实例,则直接返回,否则将新生成的实例保存在该类的一个静态字段中。这样保证一个实例对应一个方法的统计。
三. 统计缓存方法的执行时间和缓存命中率
我们需要一个新的类来统计方法的缓存命中情况,CachableMethodPerfMonitor该类从MethodPerfMonitor继承,该类只多了一个功能统计缓存的命中率;在方法执行结束时执行FinishMethod时需要指定这一次执行是否命中了缓存。并添加方法执行时间和缓存命中时的执行时间。其关键实现如下:
[Conditional(EnablePerfMonitor.CompilerSymbal)]
public void FinishMethod(bool isHitCache)
四. 如何使用
请看如下实例代码。有问题欢迎提出。
相关源码下载
相关文章推荐
- [导入]c# 统计方法执行时间,计算缓存读取数据方法的命中率
- C#计算代码执行时间的方法
- c# 统计方法执行时间
- C#计算程序执行过程花费时间的方法
- C# 计算方法执行需要的时间
- C#.Net Mvc运营监控,计算方法/接口/action/页面执行时间
- C#计算代码执行时间的方法
- C#.Net Mvc运营监控,计算方法/接口/action/页面执行时间
- C#.Net Mvc运营监控,计算方法/接口/action/页面执行时间
- C# TimeSpan类计算程序执行的时间及此类的其他常用方法
- c# 计算程序执行时间方法
- 简单统计Java方法中每行代码的执行时间
- VC精确计算代码执行时间方法
- C# 给某个方法设定执行超时时间
- C# 时间相减的计算方法(获取时间间隔)
- C# 计算时间差/运行耗时计算/时间计数器(非DateTime相减方法,Stopwatch类)及 与DateTime的对比测试
- C与Java中计算程序执行时间的方法
- 获取C#中方法的执行时间及其代码注入
- 如何获取C#中方法的执行时间以及其代码注入详解
- 用springAOP计算每一层方法执行的时间