Debug.WriteLine("Timer is high-resolution: {0}", Stopwatch.IsHighResolution);
Debug.WriteLine("Timer frequency: {0}", Stopwatch.Frequency);
结果:
Timer is high-resolution: True
Timer frequency: 2597705
This文章(自2005年起!)提到频率为3579545,比我的多一百万。 This博文提到频率为3,325,040,000,这是疯了。
为什么我的频率相对较低?我在i7 920机器上,所以它不应该更快吗?
答案 0 :(得分:25)
3,579,545是神奇的数字。这是Hertz在将其除以3并将其输入原始IBM PC中的8053定时器芯片之前的频率。奇怪的数字并非偶然选择,它是美国和日本使用的NTSC电视系统color burst signal的频率。 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时钟具有典型的电子元件容差。
答案 1 :(得分:7)
频率取决于HAL(硬件抽象层)。回到奔腾时代,通常使用CPU滴答(基于CPU时钟速率),因此您最终得到了真正的高频定时器。
对于多处理器和多核机器,尤其是可变速率CPU(CPU时钟因低功耗状态而减速)使用CPU滴答,因为定时器变得困难且容易出错,因此HAL的编写者似乎选择使用更慢但更可靠的硬件时钟,如实时时钟。
答案 2 :(得分:1)
秒表。频率值是每秒,所以你的频率为2,597,705意味着你每秒钟的票数超过250万。究竟需要多少精度?
至于频率的变化,这是与硬件有关的事情。一些最常见的硬件差异是内核数量,每个内核的频率,cpu(或内核)的当前电源状态,是否已启用操作系统动态调整CPU频率等。您的频率不会总是相同的,并且根据你检查它时cpu所处的状态,它可能更低或更高,但通常大致相同(对你而言,可能大约250万。)
答案 3 :(得分:1)
我认为2,597,705 =您的处理器频率。 Myne是2,737,822。 i7 930