C# 为什么秒表是';的时间持续时间明显大于Visual Studio';调试器是什么?
我正在比较不同Redis客户端的执行时间。我遵循了几个堆栈溢出答案的建议,例如(关于使用秒表作为简单计时器)。请注意下图中的结果。Visual Studio执行时间为926ms,但计时器值为16815ms。秒表结果始终较高(相当多)。我做错了什么C# 为什么秒表是';的时间持续时间明显大于Visual Studio';调试器是什么?,c#,stopwatch,execution-time,C#,Stopwatch,Execution Time,我正在比较不同Redis客户端的执行时间。我遵循了几个堆栈溢出答案的建议,例如(关于使用秒表作为简单计时器)。请注意下图中的结果。Visual Studio执行时间为926ms,但计时器值为16815ms。秒表结果始终较高(相当多)。我做错了什么 秒表通过计算底层计时器机制中的计时器滴答声来测量启动和停止之间经过的时间。话虽如此,这意味着如果您使用F10跳过语句,那么秒表也会在后台运行 让我们执行一个测试,将这两个时间与下面的测试进行比较,以便更好地理解。假设断点位于第1行和最后一次。当执行在第
秒表通过计算底层计时器机制中的计时器滴答声来测量
启动
和停止
之间经过的时间。话虽如此,这意味着如果您使用F10
跳过语句,那么秒表也会在后台运行
让我们执行一个测试,将这两个时间与下面的测试进行比较,以便更好地理解。假设断点
位于第1行和最后一次。当执行在第一个断点暂停时,按F5
,比较调试器和秒表显示的时间。这些将是可比的
Stopwatch stopwatch = Stopwatch.StartNew(); //Breakpoint
Print(); //Have a Thread.Sleep(1000);
stopwatch.Stop();
int count = 10; //Breakpoint
在我的例子中,Stopwatch
显示运行时间为1002ms
,调试器显示,Stopwatch
通过计算底层计时器机制中的计时器刻度来测量Start
和Stop
之间的运行时间。话虽如此,这意味着如果您使用F10
跳过语句,那么秒表也会在后台运行
让我们执行一个测试,将这两个时间与下面的测试进行比较,以便更好地理解。假设断点
位于第1行和最后一次。当执行在第一个断点暂停时,按F5
,比较调试器和秒表显示的时间。这些将是可比的
Stopwatch stopwatch = Stopwatch.StartNew(); //Breakpoint
Print(); //Have a Thread.Sleep(1000);
stopwatch.Stop();
int count = 10; //Breakpoint
在我的例子中,Stopwatch
显示经过的时间为1002ms
,调试器显示了@HansPassant,我相信显示的第一行是VS定时器启动时。这也是调试器为其运行时间提供间隔的时间。@HansPassant,我相信显示的第一行是VS定时器启动的时间。这也是调试器提供其运行时间间隔的时间。首先,感谢您的详细解释。我不是单步执行代码,而是在第一个断点处使用F5(如您所建议的)…因此代码运行通过第二个断点。注意我的问题所显示的巨大差异。当我使用ServiceStack运行相同的循环时,秒表和调试器的时间几乎相同。当我使用StackExchangeRedis客户端时,我得到了巨大的差异。看起来StackExchange客户端影响了秒表。@madmoe这是一个很好的评估。需要找到根本原因。那么你的观察结果是什么?它实际上需要大约16秒(秒表显示)还是秒表报告的值为假?MKR,首先,感谢您的详细解释。我不是单步执行代码,而是在第一个断点处使用F5(如您所建议的)…因此代码运行通过第二个断点。注意我的问题所显示的巨大差异。当我使用ServiceStack运行相同的循环时,秒表和调试器的时间几乎相同。当我使用StackExchangeRedis客户端时,我得到了巨大的差异。看起来StackExchange客户端影响了秒表。@madmoe这是一个很好的评估。需要找到根本原因。那么你的观察结果是什么?它实际上需要大约16秒(由秒表显示)还是秒表报告了错误的值?