.net 怎样才能找到中等速度过程中的缓慢步骤?

.net 怎样才能找到中等速度过程中的缓慢步骤?,.net,winforms,find,performance,.net,Winforms,Find,Performance,我有一个windows窗体应用程序。当用户选择要查看其详细信息的项目时,加载详细信息屏幕最多需要4秒(平均值为2.5)。这看起来太长了…但也没那么长 我的问题是很难找到它,因为它比应该的要长,但不会太长。换句话说,如果这需要30秒,我可以很容易地一步一步地通过,找到占用时间的步骤。但在4秒钟内,您会遇到调试器使其变慢的情况,因此您无法确定是否找到了缓慢的步骤 如何在一个适度“快速”的流程中跟踪慢的步骤?您可以使用a来告诉您时间花在哪里。您可以使用a来告诉您时间花在哪里。只需将流程主要步骤的时间戳

我有一个windows窗体应用程序。当用户选择要查看其详细信息的项目时,加载详细信息屏幕最多需要4秒(平均值为2.5)。这看起来太长了…但也没那么长

我的问题是很难找到它,因为它比应该的要长,但不会太长。换句话说,如果这需要30秒,我可以很容易地一步一步地通过,找到占用时间的步骤。但在4秒钟内,您会遇到调试器使其变慢的情况,因此您无法确定是否找到了缓慢的步骤


如何在一个适度“快速”的流程中跟踪慢的步骤?

您可以使用a来告诉您时间花在哪里。

您可以使用a来告诉您时间花在哪里。

只需将流程主要步骤的时间戳记录到日志文件或单独的窗口中即可。这样做可以:

string times = "";
times += string.Format("step 1: {0}\n", DateTime.Now);

// ...

times += string.Format("step 2: {0}\n", DateTime.Now);

// ...

times += string.Format("step 3: {0}\n", DateTime.Now);

// now output the string to a file or to a different window (or even examine it in the debugger)

只需将流程主要步骤的时间戳记录到日志文件或单独的窗口中。这样做可以:

string times = "";
times += string.Format("step 1: {0}\n", DateTime.Now);

// ...

times += string.Format("step 2: {0}\n", DateTime.Now);

// ...

times += string.Format("step 3: {0}\n", DateTime.Now);

// now output the string to a file or to a different window (or even examine it in the debugger)

找到瓶颈的一种快速而肮脏的方法是启动缓慢的操作,然后立即“全部中断”——通过单击“全部中断”按钮,或按Ctrl+Alt+Break


当你这样做几次时,你经常会发现程序在同一个地方多次中断,这应该可以提供一个线索,说明一直在进行什么操作。

找到瓶颈的一个快速而肮脏的方法是启动缓慢的操作,然后单击“全部中断”按钮立即“全部中断”,或者按Ctrl+Alt+Break


当你这样做几次时,你经常会发现程序在同一个地方多次中断,这应该能给你一个线索,说明什么东西一直在被破坏。

谢谢David。我使用的是VS。你能为我详细说明一下吗?我添加了一个指向答案的链接,其中提到了一个堆栈溢出问题,该问题在一定程度上涵盖了.net探查器。谢谢David。我使用的是VS。你能为我详细说明一下吗?我添加了一个指向答案的链接,其中提到了一个堆栈溢出问题,该问题在一定程度上涵盖了.net探查器。但这难道不会引入其他可能会干扰实际发生的代码位吗?如果以秒为单位测量延迟,此方法不会使数字偏离任何明显的值。此方法将使函数的执行速度降低微秒,这比您试图测量的延迟少6(或更多)个数量级。请注意,任何方法(如评测)都会引入延迟,但大多数都会很小,但这不会引入其他可能会干扰实际发生的代码位吗?如果以秒为单位测量延迟,此方法不会使数字偏离任何明显的值。此方法将使函数的执行速度降低微秒,这比您试图测量的延迟少6(或更多)个数量级。请注意,任何方法(例如,分析)都会引入延迟,但大多数延迟都会很小