Tag: 秒表

我将如何实施不同速度的秒表?

理想情况下,我希望有类似于秒表类的东西,但有一个名为Speed的额外属性,它将决定计时器改变分钟的速度。 我不太确定如何实现这一点。 编辑 因为人们似乎不太明白我为什么要这样做。 考虑玩足球比赛或任何体育比赛。 半分是以分钟为单位测量的,但是比赛的时间范围显着降低,即在约2.5分钟内播放45分钟的一半。

为什么条件(三元)运算符看起来明显更快?

编辑 如果我正确使用Stopwatch ,并且迭代次数增加了两个数量级 三元花了22404ms 正常需要21403ms 这些结果更接近我的预期,让我觉得这个世界是对的(如果不是我的代码。) 三元/条件运算符实际上稍慢。 继这个问题之后 ,我已经部分回答了 这个问题 。 我在x64发布模式下编译此控制台应用程序,并进行优化,并在没有附加调试器的情况下从命令行运行它。 using System; using System.Diagnostics; class Program { static void Main() { var stopwatch = new Stopwatch(); var ternary = Looper(10, Ternary); var normal = Looper(10, Normal); if (ternary != normal) { throw new Exception(); } stopwatch.Start(); ternary = Looper(10000000, Ternary); stopWatch.Stop(); Console.WriteLine( “Ternary […]

将事件处理程序附加到StopWatch

我想将事件处理程序附加到秒表。 有人可以在C#或VB中提供代码片段吗? 我没有运气就没事。

测量定时器的精度(例如秒表/ QueryPerformanceCounter)

鉴于C#中的Stopwatch类可以使用类似下面三个不同计时器的东西 系统定时器,例如精度约为+-10 ms具体取决于可通过timeBeginPeriod设置的定时器分辨率,约为+-1 ms 。 时间戳计数器(TSC)例如,滴答频率为2.5MHz或1滴= 400 ns因此理想情况下是精确度。 高精度事件定时器(HPET),例如,滴答频率为25MHz或1滴= 40 ns因此理想情况下是精确度。 我们如何衡量这种可观察的精度? 精度被定义为 精度是指两次或多次测量彼此的接近程度。 现在,如果Stopwatch使用HPET,这是否意味着我们可以使用Stopwatch来测量与定时器频率相当的精度? 我不这么认为,因为这要求我们能够使用零差异或完全固定开销的计时器,据我所知,对于Stopwatch来说并非如此。 例如,使用HPET并调用时: var before_ticks = Stopwatch.GetTimestamp(); var after_ticks = Stopwatch.GetTimestamp(); var diff_ticks = after_ticks – before_ticks; 那么diff会说大约100 ticks或4000 ns ,它也会有一些变化。 那么如何通过实验测量Stopwatch的可观测精度呢? 所以它支持下面所有可能的定时器模式。 我的想法是搜索最小数量的刻度!= 0,首先建立Stopwatch的开销,用于系统计时器,这将是0,直到例如10ms ,即10 * 1000 * 10 = 100,000个刻度,因为系统计时器的刻度分辨率为100ns ,但精度远非如此。 对于HPET,它永远不会为0,因为调用Stopwatch.GetTimestamp()的开销高于计时器的频率。 但这并没有说明我们使用计时器测量的精确程度。 我的定义是我们可以可靠地测量的差异有多小。 可以通过测量不同的迭代次数ala来执行搜索: var before = Stopwatch.GetTimestamp(); […]

我应该在阅读ElapsedMilliseconds之前调用Stop吗?

我可以通过使用ElapsedMilliseconds在秒表上调用Start而不调用Stop来获取已用时间吗? 我在互联网上搜索了很多,但只看到了Stop后调用ElapsedMilliseconds示例。 这个值是在Stop的调用中填充还是总是正确的?

为什么我的秒表。频率如此之低?

Debug.WriteLine(“Timer is high-resolution: {0}”, Stopwatch.IsHighResolution); Debug.WriteLine(“Timer frequency: {0}”, Stopwatch.Frequency); 结果: Timer is high-resolution: True Timer frequency: 2597705 这篇文章(从2005年开始!)提到频率为3579545,比我的还要多一百万。 这篇博文提到频率为3,325,040,000,这是疯了。 为什么我的频率相对较低? 我在i7 920机器上,所以不应该更快吗?

使用秒表分析.NET应用程序

似乎没有免费的* .NET性能分析器可以逐行进行分析。 因此,我正在研究使用秒表进行性能分析。 *在自由中免费,即许可包括商业应用。 编辑:回应那些告诉我“买一个探查器”的人,我想,但如果我可以花那么多钱,我就会花在别的东西上。 我试图说服我的老板,一个分析器是值得的,但没有太多运气。 这个问题主要基于好奇心。 我永远不会认为秒表是真正的探查者的替代品。 我有一个小测试应用程序(用C#编写),用于衡量在每行使用秒表时的性能差异。 测试代码是这样的: int n = 100; BigInteger f = 1; for (int i = n; i > 1; i–) { f *= i; } 以下是完整代码: http : //pastebin.com/AvbQmT32 我为每行代码都有一个秒表。 这是我的“探查者”。 我整个节目也有一个秒表。 这是我的’profiler profiler’。 我将程序配置为发布模式,任何CPU(在x64计算机上),并禁用优化。 当我在禁用探查器的情况下运行程序时,我会得到这样的结果: Line | Ticks ——————————|———- | Total time: | 359 当我在启用了探查器的情况下运行它时,我会得到这样的结果: Line | […]

StopWatch与计时器 – 何时使用

原谅我这个问题,但我似乎无法找到何时使用哪个的好来源。 如果你能用简单的术语解释它会很高兴。 而且,我正面临着这样的困境: 看,我正在编写一个简单的应用程序。 我希望它显示经过的时间(hh:mm:ss格式或其他)。 而且,能够“加速”或“减慢”其时间间隔(即加速以使实时的一分钟等于应用程序中的一小时)。 例如,在Youtubevideo中( *我们不考虑我们可以跳转到vid的特定部分* ),我们会看到在屏幕左下角观看该video所花费的实际时间,但是通过导航选项菜单,我们可以加速或缩小video。 我们实际上可以看到时间以与速度因子一致的方式更新(例如,如果您选择速度的两倍,下面的计时器比正常速度快两倍更新),您可以随时更改此速度速率。 这就是我所追求的。 Youtubevideo如何衡量经过的时间以及它们可以改变时间间隔的事实。 那么,你认为我应该选择哪两个? 定时器还是秒表? 顺便说一下,我只是在编写一个Windows窗体应用程序。 我正在模拟某些东西,我希望用户能够在他或她希望的时候加速。 虽然这很简单,但我希望采用适当的方法。

精确测量线程中代码的执行时间(C#)

我正在尝试在多个线程上尽可能准确地测量某些代码位的执行时间,同时考虑上下文切换和线程停机时间。 该应用程序在C#(VS 2008)中实现。 例: public void ThreadFunc () { // Some code here // Critical block #1 begins here long lTimestamp1 = Stopwatch.GetTimestamp (); CallComplex3rdPartyFunc (); // A long lTimestamp2 = Stopwatch.GetTimestamp (); // Critical block #1 ends here // Some code here // Critical block #2 begins here long lTimestamp3 = Stopwatch.GetTimestamp (); CallOtherComplex3rdPartyFunc […]

.NET System.Diagnostics.Stopwatch问题(返回值太低)

在我的电脑上,秒表的返回值太低了。 例如,当我指定Thread.Sleep(1000)时为200毫秒。 该程序应该等待1秒钟。 我还使用ManualResetEvent.WaitOne(1000)测试并得到了相同的结果。 框架2.0和3.0都给出了这种奇怪的行为。 我正在运行带有.NET Framework 3.5 SP1的Windows XP SP3。 这是我的测试结果(下面的代码): 1000 ms for DateTime.Now.Ticks 0201 ms for Stopwatch.ElapsedTicks 0142 ms for Stopwatch.ElapsedMilliseconds 0139 ms for Stopwatch.ElapsedTicks after Reset 0264 ms for Stopwatch.ElapsedTicks setting ThreadAffinity 0151 ms for Stopwatch.ElapsedTicks setting ProcessorAffinity (and more) 0371 ms for Stopwatch.ElapsedTicks with Syncronized object Done! // Program.cs文件 class […]