windows Mirror Driver 从win2000 到Win8的性能表现
2014-04-19 17:05
417 查看
大家都知道windows的mirror driver是对本地显卡的镜像,画到显卡的东西都会画到它上面去,我们一般通过filemapping的方式在应用层活动这个驱动里面的图像,已经在前一个时间间隙所变化的区域信息。
在win7的Aero和win8(强制Aero)后,我发现MD(mirror driver)的性能差了很多。当然我说的这个性能并不是指vnc的桌面操作性能(这根本不算什么)。我讲的是全屏视频播放的性能。
在win2k和winXp的时代,通过镜像驱动获得整个桌面图像(可能正在播放全屏视频)的性能是很高的,可以全帧获得(25fps)。但是到了win8(微软不承认MD在win8上可以用,事实上是可以的),帧率变的很低,当我每40ms检查驱动里面返回的变化区域信息,发现很多都是null的,也就是说镜像驱动没有得到系统图像更新,但是本地显卡的播放确实很流畅的。
win8提供了一种Desktop Duplication的机制,我测试了,跟用MD的方式差不多。
想了很久,我似乎明白了这里面的原因:win8之前,系统的输出合成是用GDI来实现的,画面在系统内存中,而MD的buffer也在系统中,所以系统更新MD也很快;但是到了win8,系统的显示部分严重依赖于GPU,那么系统更新MD只能是等GPU运算完了之后在传输回来,这个一直都是性能的断脚(微软反复警告不要这样做),所以MD的性能在win8后就差了很多了。
这是我的猜想了,欢迎有识之士拍砖!
在win7的Aero和win8(强制Aero)后,我发现MD(mirror driver)的性能差了很多。当然我说的这个性能并不是指vnc的桌面操作性能(这根本不算什么)。我讲的是全屏视频播放的性能。
在win2k和winXp的时代,通过镜像驱动获得整个桌面图像(可能正在播放全屏视频)的性能是很高的,可以全帧获得(25fps)。但是到了win8(微软不承认MD在win8上可以用,事实上是可以的),帧率变的很低,当我每40ms检查驱动里面返回的变化区域信息,发现很多都是null的,也就是说镜像驱动没有得到系统图像更新,但是本地显卡的播放确实很流畅的。
win8提供了一种Desktop Duplication的机制,我测试了,跟用MD的方式差不多。
想了很久,我似乎明白了这里面的原因:win8之前,系统的输出合成是用GDI来实现的,画面在系统内存中,而MD的buffer也在系统中,所以系统更新MD也很快;但是到了win8,系统的显示部分严重依赖于GPU,那么系统更新MD只能是等GPU运算完了之后在传输回来,这个一直都是性能的断脚(微软反复警告不要这样做),所以MD的性能在win8后就差了很多了。
这是我的猜想了,欢迎有识之士拍砖!
相关文章推荐
- 仿天猫首图效果
- 一个孤单无群的我
- Java 设计模式 策略模式
- [动态规划]UVA624 - CD
- 【二叉树&层次遍历】Populating Next Right Pointers in Each Node II
- 设计模式 策略模式 以角色游戏为背景
- vim常用命令
- js中的时间转换—毫秒转换成日期时间
- 设计模式 策略模式 以角色游戏为背景
- 设计模式 策略模式 以角色游戏为背景
- NETBIOS
- Android 修改手机中的型号、Wlan、蓝牙、照片信息中所带的手机型号
- matlab 采样函数
- 链表的就地逆置(递归+非递归)
- centos ssh命令找不到
- Struts2+Spring+Hibernate step by step 06 整合Hibernate
- Introdution to 3D Game Programming With DirectX11 第11章 习题解答
- VS2010 VS2012版最常用的快捷键
- Jquery和ajax开发案例之---自动补全输入框
- ubuntu网络连接图标不显示