C#中具有不同签名的函数的时间测量

时间:2017-07-05 08:43:51

标签: c# action func

我想测量某些函数调用在我的应用程序中占用的时间。为此,我使用Stopwatch类,它工作正常。它看起来像这样:

static readonly Stopwatch StopWatch = new Stopwatch();

StopWatch.Restart();
void func();
StopWatch.Stop();
Assert.Blabla

但是我在很多功能中打字。有没有办法为我做一个功能呢?我试过,但由于功能的签名都不同,我无法弄清楚。我查看了FuncAction,但它们似乎需要一个固定的签名。我想要这样的东西:

CallAndMeasureFunction(func)

1 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

定义一个方法,将您的实际方法委托为输入:

public static TimeSpan GetTimestampFor(Action action)
    {
        TimeSpan timestamp = new TimeSpan(0);
        Stopwatch stopWatch = new Stopwatch();

        if (action != null)
        {
            stopWatch.Start();
            action.Invoke();
            stopWatch.Stop();

            timestamp = stopWatch.Elapsed;
        }

        return timestamp;
    }

并将其命名如下:

var timeSpan = GetTimestampFor(() => {var xyz = ActualMethodForWhichTimeHasTobeMeasured()});

使用此代码,您可以测量每个方法的执行时间