百科问答小站 logo
百科问答小站 font logo



Windows 7 为什么可以挽救 Vista 的颓势?仅仅是因为改变了界面吗? 第1页

  

user avatar   minmin.gong 网友的相关建议: 
      

很多人提到了硬件的更新,自然而然7就比Vista顺。其实不完全是那样的。虽然Vista的最低要求比7低,但如果同样是在符合7的要求的机器上,7也比Vista流畅。而vista自己也其实要到推荐要求的机器上,才能算可用。

就拿图形系统做个例子吧。

限于当年的软硬件水平,Vista的图形部分要求所有要显示的内容都可能有2份,一份在主存,一份在显存。GDI这样软件渲染的部分,画到主存里,同步到显存。GPU渲染的部分,画到显存里,但有可能会被同步回内存。这样一来,空间和时间都浪费了。而且WDDM 1.0是没有Blt的,GDI完全无法硬件加速。只能硬生生在CPU端拷贝数据。但真正dwm做混合,很多都是发生在主存。结果就是,如果你有个D3D/OpenGL的窗口,上面叠加一个GDI控件,就会闪烁。Maya就深受其害。

到了7,只需要保留显存一份。GDI画到内存后,立刻可以通过Blt传到显存。混合都在GPU端进行。这样首先是减少了空间的消耗,第二是09年的硬件和驱动,搞这些事情完全没问题。这样的改进,可以在程序完全不知情的情况下完成。结果就是同一个程序跑快了。

DWM本身,也有个大区别。Vista的dwm用的是D3D9的接口,7的用的是D3D11。在API上的效率就提升了,混合部分的开销减少。

再说Aero。看起来几乎一样的效果,其实在Vista和7里实现也不同。Vista用的是D3D9的StretchRect,拷贝到半分辨率的一张纹理里面,横竖blur,再加上前景颜色画到屏幕。7用的是D3D11,已经没有StretchRect了,也不能拷贝到不同分辨率的纹理,但back buffer也可以作为纹理读取。结果就变成了直接从back buffer做横向blur到一个横向只有一半的纹理上,再做一次纵向blur到半分辨率的纹理。在早期的硬件上,7的做法会比较慢。因为你在shader里第一次读取的是全分辨率的。到后来就已经没区别了。

就是这些细节上的改进,让7相对Vista有着效率上的巨大优势。但因为整体风格变化不大,老用户可以习惯地接受。这才挽救了颓势。




  

相关话题

  关于malloc返回值的问题? 
  如何看待 12 月 9 日 vivo 发布的 OriginOS Ocean,有哪些值得关注的亮点? 
  同是主流操作系统,为什么macOS没有盗版系统而Windows到处是盗版? 
  微软 Win11 将重点优化 Win32 应用,哪些信息最值得消费者关注? 
  为什么基于Android深度定制的系统有的叫UI有的叫OS? 
  从操作系统内存管理来说,malloc申请一块内存的背后原理是什么? 
  把操作系统编译结果的机器码更改一位,比如将第一位0改成1或者反之,操作系统还能运行吗? 
  为什么 Windows 系统 Program Files 这个经常用来装软件的目录,名称中有个空格? 
  在国内华为的鸿蒙系统能否在 10 年内替换 Windows 系统? 
  影子系统的工作原理是什么? 

前一个讨论
如何评价《神探夏洛克》(Sherlock)第四季第一集 The Six Thatchers?
下一个讨论
为什么知乎大神都很高冷,邀请了都不回应?





© 2025-05-29 - tinynew.org. All Rights Reserved.
© 2025-05-29 - tinynew.org. 保留所有权利