GDI on Windows Mobile 托管代码和本地代码的性能比较
2010-03-01 18:58:00 来源:WEB开发网GDI on Windows Mobile---托管代码和本地代码的性能比较
摘要
在论坛或者邮件组里经常会有朋友提到,要想提高图形应用程序的性能必须要使用本地代码(C/C++)来开发。我们也经常听说本地代码在三维图形的操作上要比托管代码快得多。然而,事实并非完全如此,本文会通过多个平台上的实验数据来探讨托管代码和本地代码在图形操作上的性能问题。
Keywords
GDI, C++, C#, Windows Mobile, .NET Compact Framwork, performance
原文由Windows Embedded MVP Chris Tacke发表在:http://community.opennetcf.com/articles/cf/archive/2008/05/19/native-vs-managed-code-gdi-performance.aspx
本地代码测试
我们先来看看本地代码测试程序。代码很简单,仅仅是为了测试。这段程序绘制了一个矩形位图域并创建了相应的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))
更多精彩
赞助商链接