当前,我的代码装饰有很多这样的代码:
Stopwatch stopWatch = new Stopwatch(); stopWatch.Start();
InitializeComponent();
stopWatch.Stop(); App.CoHomeMSecs = stopWatch.ElapsedMilliseconds;
尽管我意识到这里没有太多代码,但是我有什么办法可以减少与初始化秒表,启动,停止和设置值相关的代码。
例如,是否可以将流程放入返回毫秒并以代码块作为参数的方法中?
您可以在静态类中声明一个方法,该方法接受您的操作并对其计时。
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());
您可以烘烤自己的方法,加胡椒粉和盐调味
public static long Time(Action action)
{
var stopWatch = Stopwatch.StartNew();
action();
return stopWatch.ElapsedMilliseconds;
}
用法
Console.WriteLine(Time(() => Thread.Sleep(100)));
输出
100
我强烈建议您使用互联网搜索引擎。无论如何,这是示例代码:
var stopWatch = Stopwatch.StartNew();
InitializeComponent();
App.CoHomeMSecs = stopWatch.ElapsedMilliseconds;
如果要度量的代码块长于一行代码,则可以将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
}
在代码块的末尾,它将执行您传递的操作,您可以轻松地将其分配给变量,对其进行记录等。>