c# – 为什么我的Stopwatch.Frequency这么低?

前端之家收集整理的这篇文章主要介绍了c# – 为什么我的Stopwatch.Frequency这么低?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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机器上,应该不会更快?

解决方法

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,000将是这样一个数字,最有可能是cpu时钟速率.像这样的高频率在便宜的设计中是常见的,特别是那些具有AMD内核的设计.你的电话号码是非常不寻常的,有可能你的机器不便宜.而且定时器更准确,cpu时钟具有典型的电子元件公差.

猜你在找的C#相关文章