我正在编写这样的代码,做了一个又快又脏的计时:

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

当然,有一种方法可以把这段时间代码称为一种奇特的密码.NET 3.0 lambda而不是(god 禁止)剪切粘贴几次,然后用101替换100

我知道它可以做为一个Delegate,但我想知道的lambda的方式.

推荐答案

扩展秒表课程怎么样?

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)调用这个版本.

.net相关问答推荐

.NET MAUI ListView - ObservableCollection - 在异步方法期间不更新

.NET Core 中的微服务

如何在 .Net Core EF 中组合多个条件表达式来过滤数据?

如何知道变量是否只是指向另一个对象的pointer或者它是否可以独立存在

代理、包装器或外观类之间有什么区别

使用泛型装箱和拆箱

InternalsVisibleTo 属性不起作用

如果需要,将方案添加到 URL

什么版本的 .NET 附带什么版本的 Windows?

Convert.ToBoolean 和 Boolean.Parse 不接受 0 和 1

ObservableCollection<> 与 List<>

Double.TryParse 或 Convert.ToDouble - 哪个更快更安全?

用 double 替换 int 时的 Visual Studio 长编译

例外:不支持 URI 格式

安装带有恢复操作的 Windows 服务以重新启动

如果选中,则更改列表框项的 WPF DataTemplate

找不到 System.Windows.Media 命名空间?

如何在不使用 3rd 方库的情况下登录 C#?

通过反射获取公共静态字段的值

SqlParameter 已被另一个 SqlParameterCollection 包含 - using() {} 作弊吗?