如何测量 C# 中每一行的执行时间

Posted

技术标签:

【中文标题】如何测量 C# 中每一行的执行时间【英文标题】:How do I measure execution time for each row in C# 【发布时间】:2016-03-03 11:34:34 【问题描述】:

我有以下硒测试:

[TestMethod]
public void Edit()

    Driver.GoToAdministrera();

    Driver.ClickLink(strings.ActorSettings);

    Driver.SendKeysToId(text, "Attributes");

    Driver.Navigate().Refresh();

    Driver.AssertTextInId(string.Empty, "Attributes");

    Driver.SendKeysToId(text, "Attributes");

    Driver.ClickClass("submitbutton");

    Thread.Sleep(3000);

    Driver.Navigate().Refresh();

    Driver.AssertTextInId(text, "Attributes");

速度很慢,我想分析一下瓶颈在哪里。我知道我可以分析测试,但这会给我一些长的堆栈跟踪和热点。我只想知道每行的执行时间有多长。

我知道我可以使用 StopWatch 类。我什至可以为此做一些帮助方法:

protected static void Time(Action action)

    var sw = new Stopwatch();
    sw.Reset();
    sw.Start();

    action();

    sw.Stop();
    Console.WriteLine(sw.Elapsed + " " + action.Method.Name);

但这需要我修改我的测试。

有谁知道在一段代码中获取每一行执行时间的方法吗?

【问题讨论】:

如果您使用 Visual Studio 2012 或更新版本进行开发,为什么不使用内置工具来分析代码和分析应用程序? 这会给我一些长堆栈跟踪和热点。我只想知道每行的执行时间是多长时间。 如果您使用该分析器,只需查找上述每个例程的包含百分比。该分析器有一个缺点 - 它在 I/O 或其他阻塞期间丢弃样本,所以如果这是缓慢的原因,它不会显示它。仪表模式可能对您来说已经足够好了,尽管它会丢失行级信息。一个总是有效的方法是this one 【参考方案1】:

如果您使用 Visual Studio 2015 或更高版本,您可以在调试器下运行测试并查找 PerfTips 值。从一行到另一行,您将获得每行测试所用时间的估计值,这可能是您需要的。

【讨论】:

【参考方案2】:
DateTime start = DateTime.Now;
// Do Processing
Driver.GoToAdministrera();
DateTime end = DateTime.Now;
Console.WriteLine("Time taken : " + (end - start));

【讨论】:

是的,但它需要我修改我的测试。 Stopwatch 将是一个更好的选择然后DateTime

以上是关于如何测量 C# 中每一行的执行时间的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法从属性测量 C# 函数执行时间?

如何在 C# Winforms 应用程序中取消执行长时间运行的异步任务

在 do while 循环内部,我想在 c# 中每 1 分钟执行一次特定代码,直到条件满足

如何在 C# winform 中每分钟自动调用一个方法

C# 如何间隔一定的时间执行一次代码?

C# |控制台应用程序 |如何在执行下一行之前让程序等待(以毫秒为单位的时间)?