GDI on Windows Mobile--Managed 程式碼和本地代碼的效能比較

來源:互聯網
上載者:User

在論壇或者郵件組裡經常會有朋友提到,要想提高圖形應用程式的效能必須要使用本地代碼(C/C++)來開發。我們也經常聽說本地代碼在三維圖形的操作上要比Managed 程式碼快得多。然而,事實並非完全如此,本文會通過多個平台上的實驗資料來探討Managed 程式碼和本地代碼在圖形操作上的效能問題。KeywordsGDI, C++, C#, Windows Mobile, .NET Compact Framwork, performance本地代碼測試我們先來看看本地代碼測試程式。代碼很簡單,僅僅是為了測試。這段程式繪製了一個矩形位元影像域並建立了相應的DC(device context),然後重複10000次以下兩個操作:一是不斷的用灰色填充矩形域,二是不斷在矩形域中間繪製綠色的橢圓。這裡橢圓的長軸短軸都是在不斷變化的,這可以避免顯示驅動緩衝對我們的測試造成的影響。主要代碼如下:

...
screenDC = GetWindowDC(NULL);
bufferDC = CreateCompatibleDC(screenDC);
oldPen = (HPEN)SelectObject(bufferDC, CreatePen(PS_NULL, 0, NULL));
oldBrush = (HBRUSH)SelectObject(bufferDC, CreateSolidBrush(#00ff00));
hBufferBmp = CreateCompatibleBitmap(screenDC, BOX_WIDTH, BOX_HEIGHT);
oldObject = SelectObject(bufferDC, hBufferBmp);
rect.top = 0;
rect.left = 0;
rect.right = BOX_WIDTH;
rect.bottom = BOX_HEIGHT;
for(i = 0 ; i < GDI_ITERATIONS_PER_REPORT ; i++)
{
width += xop;
height+= yop;
if((width >= BOX_WIDTH) || (width <= 0))
xop *= -1;
if((height >= BOX_HEIGHT) || (height <= 0))
yop *= -1;
r += rop;
g += gop;
b += bop;
if((r > 254) || (r< 1))
rop *= -1;
if((g > 254) || (g< 1))
gop *= -1;
if((b> 254) || (b< 1))
bop *= -1;
boxBrush = CreateSolidBrush(RGB(r, g, b));
FillRect(bufferDC, &rect, boxBrush);
DeleteObject(boxBrush);
Ellipse(bufferDC, width, height, BOX_WIDTH - width, BOX_HEIGHT - height);
Ellipse(bufferDC, height, width, BOX_WIDTH - height, BOX_HEIGHT - width);
BitBlt(screenDC, left, top, left + BOX_WIDTH, top + BOX_HEIGHT,
bufferDC, 0, 0, SRCCOPY);
}
...

運行效果如圖:

測試結果是,在Windows Mobile 5.0的模擬器上,執行迴圈的速度為490次每秒(當然這跟你PC機的效能是有關的)。每一次操作包括了填充矩形和繪製兩個橢圓的過程。在一台Windows Mobile 5.0 Dell Axim x51(PXA270處理器)的實際裝置上,這個程式可以達到250次每秒的迴圈速度。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.