在某个时间点从两个事件侦听的方法的执行时间c#

时间:2019-05-29 19:13:59

标签: c#

我有两个事件,它们同时触发并调用相同的方法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个秒表,则可以运行该事件吗?

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;
}