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

xof*_*ofz 11 c# stopwatch

  Debug.WriteLine("Timer is high-resolution: {0}", Stopwatch.IsHighResolution);
  Debug.WriteLine("Timer frequency: {0}", Stopwatch.Frequency);
Run Code Online (Sandbox Code Playgroud)

结果:

  Timer is high-resolution: True
  Timer frequency: 2597705
Run Code Online (Sandbox Code Playgroud)

这篇文章(从2005年开始!)提到频率为3579545,比我的还多一百万. 这篇博文提到频率为3,325,040,000,这是疯了.

为什么我的频率相对较低?我在i7 920机器上,所以不应该更快吗?

Han*_*ant 25

3,579,545是神奇的数字.这是Hertz在将其除以3并将其输入原始IBM PC中的8053定时器芯片之前的频率.奇怪的数字并非偶然选择,它是美国和日本使用的NTSC电视系统中色同步信号的频率.IBM工程师正在寻找一种廉价的晶体来实现振荡器,没有什么比每台电视机使用的更便宜.

一旦IBM克隆变得广泛可用,对于他们的设计者来说,选择相同的频率仍然很重要.许多MS-DOS软件依赖于以该速率滴答的计时器.直接针对芯片是一种常见的犯罪.

Windows出现后,情况发生了变化.Windows 2的一个版本是第一个虚拟化定时器芯片的版本.换句话说,不允许软件直接寻址定时器芯片.处理器配置为在受保护模式下运行,并拦截尝试使用I/O指令.改为运行内核代码,允许伪造指令的返回值.现在有可能有多个程序使用计时器而不会踩到彼此的脚趾.打破对硬件实际实现方式依赖性的重要第一步.

Win32 API(Windows NT 3.1和Windows 95)使用API​​,QueryPerformanceCounter()和QueryPerformanceFrequency()形式化对计时器的访问.内核级组件硬件适配层允许BIOS通过该频率.现在,硬件设计人员可以真正降低对确切频率的依赖性.这需要很长时间,在2000年左右,绝大多数机器仍然具有传统速率.

但是,削减PC设计成本的永无止境的追求终结了这一点.如今,硬件设计人员只选择芯片组中随时可用的任何频率.3,325,040,000就是这样的数字,很可能是CPU时钟频率.像这样的高频在廉价设计中很常见,特别是那些具有AMD核心的设备.你的号码非常不寻常,有些机会并不便宜.而且计时器更准确,CPU时钟具有典型的电子元件容差.

  • 嗯,你的分辨率要低得多.但是你的计时器可能更准确.3.3 GHz CPU时钟速率通常仅精确10%.我不知道一个事实,这取决于信号是如何产生的.任何以兆赫兹或更高的速度运行的东西都非常适合计时软件,由于线程引起的抖动比这更糟糕. (4认同)

Joh*_*ler 7

频率取决于HAL(硬件抽象层).回到奔腾时代,通常使用CPU滴答(基于CPU时钟频率),因此您最终得到了真正的高频定时器.

对于多处理器和多核机器,尤其是可变速率CPU(CPU时钟因低功耗状态而减速)使用CPU滴答,因为定时器变得困难且容易出错,因此HAL的编写者似乎选择了使用更慢但更可靠的硬件时钟,如实时时钟.