近來遇見了這樣一個問題:
顯示界面時需要將一個Gdiplus::Bitmap對象的內容貼在界面上,而其中的內容又是不停的變化的,于是問題來了,我是對Bitmap對象通過調用Graphics::Clear重置呢,還是把這個Bitmap對象搞成局部變量每次進來時都新建一個呢?
傻X的我起初一直以為通過Clear函數重置Bitmap要比調用Bitmap的構造函數新建快,所以我盡力重復利用已有的Bitmap對象而避免重建,但昨天測試了一下發現新建要比重置快得多
這是我的測試方法: 對比重復創建一個100×100的Bitmap和重置同樣尺寸的Bitmap對象所用的時間
環境
系統:XP SP3
CPU:AMD Athlon II X2 245 2.96G
內存:2G
環境: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);
}
結果:
當循環1W次時所用時間(單位MS)
構造函數新建對象 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
當循環10W次時所用時間
構造函數新建對象 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 閱讀(2634)
評論(1) 編輯 收藏 引用 所屬分類:
other