在vb.net中跟踪函数调用的持续时间

sco*_*rin 5 vb.net debugging visual-studio-2010 performance-testing visual-studio-debugging

在我们的VB6应用程序中,我们添加了一些实用程序函数来跟踪函数中花费的时间.我们这样做是为了跟踪性能瓶颈.

基本上,它是如何工作的有两个实用程序函数:StartTickCount()和EndTickCount().您可以在每个函数中传递函数的名称,函数将使用字典来获取调用StartTickCount()时的滴答计数,然后在调用EndTickCount()时减去滴答计数.这并不完美,因为它当然没有考虑到获取滴答计数的要求需要时间等,但基本上它适用于我们的目的.对接部分的痛苦是确保在每个函数的开头调用StartTickCount()并在每个出口点调用EndTickCount():

Private Function SomeFuction() as String
    ' indicate the function started
    StartTickCount("MyClass.SomeFunction")


    ' some logic that causes the function to end
    If (some logic) Then
        EndTickCount("MyClass.SomeFunction")
        Return "Hello!"
    End If

    ' final exit point
    EndTickCount("MyClass.SomeFunction")
    Return "World"
End Function
Run Code Online (Sandbox Code Playgroud)

无论如何,是否通过VS 2010调试器或System.Reflection命名空间内置任何功能来在VB.NET中执行类似的操作?

基本上,我想要的是记录每个函数被调用的次数,在该函数中花费的总时间,在该函数中花费的平均秒数,以及在单个调用中花费的最大时间.功能.

我当然可以手工编写(因为我们已经在VB6中执行了一次),但是如果有现有的工具可以使它更容易,我宁愿使用它们.

And*_*eli 7

您可以通过修改/调整以下代码来满足您的需求,从而获得相同的结果:

  'Create a variable for start time:
  Dim TimerStart As DateTime
  TimerStart = Now
 '
 'place your computing here
 '
  Dim TimeSpent As System.TimeSpan
  TimeSpent = Now.Subtract(TimerStart)
  MsgBox(TimeSpent.TotalSeconds & " seconds spent on this task")
Run Code Online (Sandbox Code Playgroud)

您可以查看有关TimeSpan的文档,以便以毫秒或其他格式直接获取时间.


Der*_*mes 4

我想看看秒表类 - 它是为此类事情设计的。

然而,已经有一个很棒的工具可以做到这一点,而且它实际上只需很少的工作就可以做得更好。它还有 10 天的免费试用期。

http://www.jetbrains.com/profiler/

(我不为jetbrains工作,也不隶属于jetbrains - 但我希望我是因为他们制造了一些非常酷的产品)