一尘不染

用委托或lambda包装秒表计时?

c#

我正在编写这样的代码,但时间却又快又脏:

var sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 1000; i++)
{
    b = DoStuff(s);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);

肯定有一个方法来调用此位的计时码作为花式schmancy .NET 3.0的λ,而不是(上帝保佑)剪切和粘贴了几次和更换 DoStuff(s)
DoSomethingElse(s)

我知道可以这样做,Delegate但我想知道lambda方式。


阅读 292

收藏
2020-05-19

共1个答案

一尘不染

如何扩展码表类?

public static class StopwatchExtensions
{
    public static long Time(this Stopwatch sw, Action action, int iterations)
    {
        sw.Reset();
        sw.Start(); 
        for (int i = 0; i < iterations; i++)
        {
            action();
        }
        sw.Stop();

        return sw.ElapsedMilliseconds;
    }
}

然后这样称呼它:

var s = new Stopwatch();
Console.WriteLine(s.Time(() => DoStuff(), 1000));

您可以添加另一个重载,该重载忽略“ iterations”参数,并使用一些默认值(例如1000)调用此版本。

2020-05-19