首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

请高手帮忙分析一下下面代码的效率有关问题

2014-07-23 
请高手帮忙分析一下下面代码的效率问题?C/C++ codevoid CMapInfoPluginView::PrepareBmpTotalImage(CDC *p

请高手帮忙分析一下下面代码的效率问题?

C/C++ code
void CMapInfoPluginView::PrepareBmpTotalImage(CDC *pDC, CRect &rect){    if( !m_bmpTotalImage.GetSafeHandle() ) m_bmpTotalImage.CreateCompatibleBitmap( pDC, rect.Width(), rect.Height() );    else m_bmpTotalImage.SetBitmapDimension( rect.Width(), rect.Height() );    CDC dcMemSrc;    dcMemSrc.CreateCompatibleDC( pDC );    dcMemSrc.SelectObject( &m_bmpBackground );        CDC dcMemDst;    dcMemDst.CreateCompatibleDC( &dcMemSrc );    dcMemDst.SelectObject( &m_bmpTotalImage );    dcMemDst.BitBlt( 0, 0, rect.Width(), rect.Height(), &dcMemSrc, 0, 0, SRCCOPY );    Graphics *pGraphics = Graphics::FromHDC( dcMemDst.m_hDC );    for( size_t i = 0; i < m_vecTaskModule.size(); i++ )    {        m_vecTaskModule[i].pTaskModule->Draw( pGraphics, rect );    }    dcMemSrc.DeleteDC();    dcMemDst.DeleteDC();    delete pGraphics;}


当数据量比较小时,此函数工作正常。当接收的多播数据比较大时,此函数会被频繁调用,此时CPU占用100%。
请高手帮忙分析一下此代码的问题之处,谢谢!!

[解决办法]
GDI需要消耗资源,数据量太大,自然CPU会上去,Sleep降低一下
[解决办法]
没必要每个都得重绘吧
需要时再绘图
[解决办法]
for( size_t i = 0; i < m_vecTaskModule.size(); i++ )
改为
int length = m_vecTaskModule.size(); 
for( size_t i = 0; i <length; i++ )

[解决办法]
可以更新数据,但不刷新,比如1s刷一次。
这个函数只刷新数据,再弄个线程显示,或定时器也行,1s draw 1次

[解决办法]
可采用定时刷新

m_vecTaskModule[i].pTaskModule->Draw( pGraphics, rect );
为何不先绘制到内存DC上
[解决办法]
可以设个标志,有新数据时刷新重绘。

热点排行