3 回答

TA贡献1780条经验 获得超5个赞
我建议您接受一个更通用的操作,您可以将它用于更多功能。然后,您可以使用 lamda 表达式调用它。例子:
private static long MeasureDuration(Action algorithm)
{
var watch = System.Diagnostics.Stopwatch.StartNew();
algorithm.Invoke();
watch.Stop();
return watch.ElapsedMilliseconds;
}
我使用 .Invoke() 进行链接,这样更容易理解这是一个被调用的操作。
并这样称呼它:
bool found;
var result = MeasureDuration(() => found = BinarySearching(myArray, mySearchValue));

TA贡献1851条经验 获得超5个赞
Func<bool>你可以像这样传递一个参数:
public static TimeSpan Measure(Func<int[], int, bool> method, int[] arg1, int arg2)
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = method.Invoke(arg1, arg2);
stopwatch.Stop();
return stopwatch.Elapsed;
}
然后你可以像这样调用它:
var timeTaken = Measure(MethodToMeasure, new [] {1, 2, 3}, 1);

TA贡献1884条经验 获得超4个赞
假设您不想像基于 Action 的答案那样丢弃算法的结果,实现它的最通用方法可能是在返回类型中使方法泛型,并将算法的输入参数绑定到 lambda表达式,因此具有类型Func<T>. 我假设您可以使用新的 C# 7 元组语法
private static (T, long) GetResultAndDuration<T>(Func<T> algorithm)
{
var watch = System.Diagnostics.Stopwatch.StartNew();
T result = algorithm();
watch.Stop();
return (result, watch.ElapsedMilliseconds);
}
你可以这样称呼它:
(var result, var duration) = GetResultAndDuration(() => MyCoolAlgorithm(42, "some param"));
- 3 回答
- 0 关注
- 114 浏览
添加回答
举报