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后就差了很多了。

這是我的猜想了,歡迎有識之士拍磚!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM