∈鱼杆 ---我的鱼塘

执着,坚定,友爱,勇敢(www.pumaboyd.com)Live Message
随笔 - 189, 文章 - 1, 评论 - 147

导航

HowTo:C#性能测试扩展函数

Posted on 2009-01-14 14:12  ∈鱼杆  阅读(387)  评论(0编辑  收藏

看了ark的文章让我想起了些这个。可能没有太多的实际意义,但确是一个不错的思路。
我们平时在使用stopwatch统计时间的时候一般会这样使用。

Stopwatch watch = Stopwatch.StartNew();
for (int i = 0; i < runs; i++)
{
.......
}
watch.Stop();

这样就可以统计到运行的时间,但用过Python的人都知道,python自备电池。那么其实用扩展函数就可以实现这个类似功能(PS:其实功能还是相差蛮大的,但皮已经画的很像了)。
先演示如何使用(统计A.Run这个方法运行100次的使用时间)

class Program
    {
        static void Main(string[] args)
        {
            A a = new A();
            Action act = a.Run;
            Console.WriteLine(act.Profile(100));
            Console.Read();
        }
    }
    public class A
    {
        public void Run()
        {
            for (int i =0; i < 100000; i++) ;
        }
    }
}

用扩展方法来实现这个需求,这样就不用重复写stopwatch了

public static class FunctionHelper
    {
        public static string Profile(this Action func, int runs)
        {     Stopwatch watch = Stopwatch.StartNew();   for (int i = 0; i < runs; i++)
            {
                func();
            }
            watch.Stop();   float sec = watch.ElapsedMilliseconds / 1000.0f;
            float freq = runs / sec;     return String.Format("execute runs:{0};sec:{1};freq",
                                runs,  //运行次数 
                                sec,   // 运行时间
                                freq // 平均运行时间
                                );   }   }

有了这个扩展方法,你就可以对某些特定的方法自动调用性能函数了。