有没有一种方法可以减少启动/停止秒表并测量毫秒所需的代码?

问题描述 投票:0回答:4

当前,我的代码装饰有很多这样的代码:

Stopwatch stopWatch = new Stopwatch(); stopWatch.Start();
InitializeComponent();
stopWatch.Stop(); App.CoHomeMSecs = stopWatch.ElapsedMilliseconds;

尽管我意识到这里没有太多代码,但是我有什么办法可以减少与初始化秒表,启动,停止和设置值相关的代码。

例如,是否可以将流程放入返回毫秒并以代码块作为参数的方法中?

c#
4个回答
2
投票

您可以在静态类中声明一个方法,该方法接受您的操作并对其计时。

using System;
using System.Diagnostics;

public static class MethodTimer
{
    public static double CalcTime(Action action)
    {
        var stopWatch = new Stopwatch();
        stopWatch.Start();
        action();
        stopWatch.Stop();

        return stopWatch.Elapsed.TotalMilliseconds;
    }
}

您将以这种方式使用它:

var millis = MethodTimer.CalcTime(() => SomeMethod());

3
投票

您可以烘烤自己的方法,加胡椒粉和盐调味

public static long Time(Action action)
{
   var stopWatch =  Stopwatch.StartNew();
   action();
   return stopWatch.ElapsedMilliseconds;
}

用法

Console.WriteLine(Time(() => Thread.Sleep(100)));

输出

100

Demo Here


1
投票

我强烈建议您使用互联网搜索引擎。无论如何,这是示例代码:

var stopWatch = Stopwatch.StartNew();
InitializeComponent();
App.CoHomeMSecs = stopWatch.ElapsedMilliseconds;

1
投票

如果要度量的代码块长于一行代码,则可以将using块与如下的辅助类一起使用:

public class BlockTimer : IDisposable
{
    private readonly Stopwatch _stopwatch;
    private Action<long> _getMillisecondsFunc;

    public BlockTimer(Action<long> getMilliseconds)
    {
        _getMillisecondsFunc = getMilliseconds;

        _stopwatch = new Stopwatch();
        _stopwatch.Start();
    }

    public void Dispose()
    {
        _stopwatch.Stop();
        _getMillisecondsFunc(_stopwatch.ElapsedMilliseconds);
    }
}

可以通过这种方式使用:

long duration;
using(new BlockTimer(t=>duration=t))
{
    // all
    // the code
    // I want 
    // to measure
}

在代码块的末尾,它将执行您传递的操作,您可以轻松地将其分配给变量,对其进行记录等。>

© www.soinside.com 2019 - 2024. All rights reserved.