近來遇見了這樣一個問題:
顯示界面時需要將一個Gdiplus::Bitmap對象的內(nèi)容貼在界面上,而其中的內(nèi)容又是不停的變化的,于是問題來了,我是對Bitmap對象通過調(diào)用Graphics::Clear重置呢,還是把這個Bitmap對象搞成局部變量每次進(jìn)來時都新建一個呢?
傻X的我起初一直以為通過Clear函數(shù)重置Bitmap要比調(diào)用Bitmap的構(gòu)造函數(shù)新建快,所以我盡力重復(fù)利用已有的Bitmap對象而避免重建,但昨天測試了一下發(fā)現(xiàn)新建要比重置快得多
這是我的測試方法: 對比重復(fù)創(chuàng)建一個100×100的Bitmap和重置同樣尺寸的Bitmap對象所用的時間
環(huán)境
系統(tǒng):XP SP3
CPU:AMD Athlon II X2 245 2.96G
內(nèi)存:2G
環(huán)境:VC 2008 sp1
{
CString tmp;
SYSTEMTIME begintime,endtime,passtime;
ZeroMemory(&begintime , sizeof(SYSTEMTIME));
ZeroMemory(&endtime , sizeof(SYSTEMTIME));
GetLocalTime(&begintime);
for (int i = 0 ; i < 100000 ; i++)
{
Gdiplus::Bitmap Auto(100,100);
}
GetLocalTime(&endtime);
tmp.Format(_T("%dms") , (endtime.wSecond - begintime.wSecond)*1000 + endtime.wMilliseconds - begintime.wMilliseconds);
MessageBox(tmp);
}
{
CString tmp;
SYSTEMTIME begintime,endtime,passtime;
ZeroMemory(&begintime , sizeof(SYSTEMTIME));
ZeroMemory(&endtime , sizeof(SYSTEMTIME));
CDC *pDC = GetDC();
Gdiplus::Graphics grap (pDC->m_hDC);
Gdiplus::Bitmap AutoBmp(100,100);
Gdiplus::Graphics *pGrap = grap.FromImage(&AutoBmp);
Gdiplus::Color newcolor(0,0,0,0);
GetLocalTime(&begintime);
for (int i = 0 ; i < 100000 ; i++)
{
pGrap->Clear(newcolor);
}
GetLocalTime(&endtime);
tmp.Format(_T("%dms") , (endtime.wSecond - begintime.wSecond)*1000 + endtime.wMilliseconds - begintime.wMilliseconds);
MessageBox(tmp);
}
結(jié)果:
當(dāng)循環(huán)1W次時所用時間(單位MS)
構(gòu)造函數(shù)新建對象 Graphics::Clear重置
62 344
62 344
47 344
62 343
47 344
62 360
63 344
47 344
62 344
62 343
----------------------------------------------------
平均 57.6 345.4
當(dāng)循環(huán)10W次時所用時間
構(gòu)造函數(shù)新建對象 Graphics::Clear重置
563 3467
562 3407
578 3531
563 3563
625 3390
578 3515
562 3484
594 3515
547 3453
563 3422
----------------------------------------------------
平均 573.5 3474.9
posted on 2010-12-23 09:45
zhaoyg 閱讀(2635)
評論(1) 編輯 收藏 引用 所屬分類:
other