C# 强制计时器在设定的时间内循环[C]

C# 强制计时器在设定的时间内循环[C],c#,performance,timer,C#,Performance,Timer,为了实习,我正在用C#Net重写一个VB6.0程序。它测量来自精密磨床的输入数据,并给出其精度的读数。程序的大部分内容都是在一个计时器对象内完成的,时间间隔为10。该程序尚未完成,因此尚未在实际机器上进行测试,但我有一个生成正弦波的调试模拟(以确保在接收数据时,拨号盘和数字都能按预期运行) 我使用的是WinForms和Timer对象,而不是System.Threading.Timer(尽管如果这听起来是一个更好的选择,无论如何我都愿意使用它)。我使用System.Diagnostics.Stop

为了实习,我正在用C#Net重写一个VB6.0程序。它测量来自精密磨床的输入数据,并给出其精度的读数。程序的大部分内容都是在一个计时器对象内完成的,时间间隔为10。该程序尚未完成,因此尚未在实际机器上进行测试,但我有一个生成正弦波的调试模拟(以确保在接收数据时,拨号盘和数字都能按预期运行)

我使用的是WinForms和Timer对象,而不是System.Threading.Timer(尽管如果这听起来是一个更好的选择,无论如何我都愿意使用它)。我使用System.Diagnostics.Stopwatch ElapsedTicks来计时计时器从开始到结束的平均周期。在Form1上,计时器通常需要大约19500个滴答声。当它切换到Form2时,这个数字会下降到15000左右,而在Form3上甚至会下降到11000

现在,Form3的计算速度更快是有道理的,因为它跳过了一些不需要运行的代码部分。Form2应该运行整个计时器。奇怪的是,在切换到Form2,然后再返回Form1之后,计时器保持在16000左右,并且每次在表单之间切换时都会稍微快一点。间隔始终保持恒定的10

我不知道它在做什么,也不知道我怎样才能强迫它以恒定的速度运行。此外,我甚至不确定这是否重要。它一直在极大地困扰着我,但我不确定当它的程序从机器接收实际数据时,它的计算速度是否会更快

如果有人对计时器的工作方式有任何建议,或者如何限制它以恒定速率运行,或者即使我对此是否感到担忧,他们都会非常感激


感谢您的时间

当您指的是循环时,您指的是执行事件逻辑所需的时间还是计时器滴答声之间的时间?UI计时器可能不那么准确,因为它在UI线程上运行

老实说,听起来你需要实时需求,这是你不容易得到的(或者根本得不到的)。您还必须处理在整个过程中任意运行的垃圾收集


我不担心它,虽然我可能会使用线程计时器,而不是UI计时器。

你可能想使用后台工作程序来完成这项工作……是的,我用“循环”来表示计时器执行代码所用的时间,而不是实际的CPU周期。我将花一点时间将其切换到线程计时器,看看这是否会有所不同。我知道它似乎更灵活。谢谢你的建议。这对执行的实际时间没有任何影响。不幸的是,你无法控制这一切。任意因素将成为阻碍因素——尤其是操作系统不是硬实时的。你不必担心代码执行速度的微小差异。如果你这样做了,那么在CLR下运行的C#将永远无法工作——看看使用本机代码的实时系统。当然,忽略了一个事实,即大多数流行的操作系统也不是实时的。是的,不幸的是,对于我在这里使用的语言,我没有太多的选择。公司决定使用C#,所以这是我正在学习和工作的东西。我猜执行波动是可以忽略的:)