我正在编写一些代码来生成过程图。 某些步骤比其他步骤耗时更长,我正在对构建的每个部分进行计时,以查看瓶颈的位置,并让用户知道程序没有停顿。包装时间通用函数
目前,我有很多的代码看起来像这样:
Console.Write("Creating tiles");
var watch = System.Diagnostics.Stopwatch.StartNew();
CreateTiles(); //key mapgen function
watch.Stop();
Console.WriteLine("... finished in: {0} s", watch.ElapsedMilliseconds/1000d);
Console.Write("Calculating tile elevations");
var watch = System.Diagnostics.Stopwatch.StartNew();
CalculateTileElevations(); //key mapgen function
watch.Stop();
Console.WriteLine("... finished in: {0} s", watch.ElapsedMilliseconds/1000d);
//etc
我的问题是,是否有重构这个更看起来像下面的方法:
ExecuteTimedFunction(CreateTiles(), "Creating tiles");
ExecuteTimedFunction(CalculateTileElevations(), "Calculating tile elevations");
void ExecuteTimedFunction(Func genericFunction, String logMsg)
{
Console.Write(logMsg);
var watch = System.Diagnostics.Stopwatch.StartNew();
genericFunction();
watch.Stop();
Console.WriteLine("... finished in: {0} s", watch.ElapsedMilliseconds/1000d);
}
注意:所有函数的返回类型是void
,因为它们都操纵瓦片的主列表,但并非所有函数都具有相同数量的输入参数(尽管大多数参数具有0个参数,因此对于该情况的解决方案会仍然有用)
如果将'genericFunction'的类型更改为'Action',它应该ķ。然后你可以把它叫做ExecuteTimedFunction(CreateTiles,“Creating tiles”);' – Lee