windows Mirror Driver 从win2000 到Win8的性能表现

大家都知道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后就差了很多了。

这是我的猜想了,欢迎有识之士拍砖!

你可能感兴趣的:(windows Mirror Driver 从win2000 到Win8的性能表现)