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时钟具有典型的电子元件容差.
频率取决于HAL(硬件抽象层).回到奔腾时代,通常使用CPU滴答(基于CPU时钟频率),因此您最终得到了真正的高频定时器.
对于多处理器和多核机器,尤其是可变速率CPU(CPU时钟因低功耗状态而减速)使用CPU滴答,因为定时器变得困难且容易出错,因此HAL的编写者似乎选择了使用更慢但更可靠的硬件时钟,如实时时钟.
| 归档时间: |
|
| 查看次数: |
3515 次 |
| 最近记录: |