您好我正在尝试实现一种方法,该方法将一个方法(在宏观方案中的任何方法)作为参数。我希望在仅调用它的方法中运行此参数方法,如果传入此方法的方法具有返回值,那么它仍然应该能够返回其值。
我想测量传入方法的性能。
return Performance(GetNextPage(eEvent, false));
public static T Performance<T>(T method)
{
T toReturn;
Stopwatch sw = Stopwatch.StartNew();
toReturn = method;
sw.Stop();
Debug.WriteLine(sw.Elapsed.ToString());
return toReturn;
}
我尝试过使用Action
几乎可以使用它的方式
public static TimeSpan Measure(Action action)
{
Stopwatch sw = Stopwatch.StartNew();
action();
sw.Stop();
return sw.Elapsed;
}
var dur = Measure(() => GetNextPage(eEvent, false));
问题是action()
返回void
所以我无法按照我想要的方式使用它。
我查看了Func
,但我不知道如何通过传递Performance
方法运行我的GetNextPage
方法。
答案 0 :(得分:1)
您需要将Func<T>
传递给Performance
:
public static T Performance<T>(Func<T> func)
{
T toReturn;
Stopwatch sw = Stopwatch.StartNew();
toReturn = func();
sw.Stop();
Debug.WriteLine(sw.Elapsed.ToString());
return toReturn;
}
我认为您还需要使用单独的Measure
方法来处理不返回值的方法,并接受目前的Action
。
您对Performance
的来电变为:
return Performance(() => GetNextPage(eEvent, false));
eEvent
和false
成为关闭的一部分,因此它只是获取并返回GetNextPage
的返回结果。