我有两个事件,它们同时触发并调用相同的方法Method1()。所以在某个时间点,
该方法将执行两次。在该方法中,我还有另一个方法Method2(),我必须为其找到执行时间。
现在,我已经创建了2个秒表,一个是从event1触发的方法,另一个是针对event2的,这样它们就不会彼此阻塞,并且我还可以区分从event1或event2触发method1的方法2的执行时间。结果。
public void Method1()
{
if(event1)
{
Stopwatch timer = new Stopwatch();
timer1.Start();
Method2();
timer1.Stop();
Console.WriteLine("Time elapsed from event1:
{0:hh\\:mm\\:ss}", stopwatch.Elapsed);
}
else
{
Stopwatch timer2 = new Stopwatch();
timer2.Start();
Method2();
timer2.Stop();
Console.WriteLine("Time elapsed from event2:
{0:hh\\:mm\\:ss}", stopwatch.Elapsed);
}
}
有什么帮助,我可以创建一个通用且通用的秒表实现,如果某个方法正在某个时间从其他来源执行而不必创建2个秒表,则可以运行该事件吗?
答案 0 :(得分:1)
您可以传递System.Action
作为参数和名称以应用于日志文本。
public void ExecuteAndMeasureExecutionTime(System.Action methodToExecute, string logName = null)
{
Stopwatch timer = new Stopwatch();
timer1.Start();
methodToExecute();
timer1.Stop();
Console.WriteLine("Time elapsed from {0}: {1:hh\\:mm\\:ss}", logName ?? "event", stopwatch.Elapsed);
}
呼叫代码:
ExecuteAndMeasureExecutionTime(Method1, "Method1");
ExecuteAndMeasureExecutionTime(() => Method2(), "Method2");
答案 1 :(得分:0)
您可以编写一个包装器方法,该方法接受一个Agent
来执行,并返回一个Action
来表示执行该操作所花费的时间:
TimeSpan
那么您可能会这样称呼它:
public static TimeSpan TimeMethod(Action method)
{
Stopwatch sw = Stopwatch.StartNew();
method.Invoke();
sw.Stop();
return sw.Elapsed;
}