双缓冲使用注意事项
来源:互联网 发布:拍拍贷网络借贷 编辑:程序博客网 时间:2024/06/09 13:51
在遇到绘图闪屏的时候,我们可能第一反应就是利用双缓冲,这个的确是正确的。可是我们部分人会忽略某些细节造成效率降低的问题。
注意一、如果需要频繁的向客户区Copy像素,那么我们的内存Dc应该是一个和窗口生命周期相同的变量。因为,我们每次创建Dc需要消耗时间,并且在加载位图的耗费的时间也非常多。我就犯了这个错误,每次绘图重新创建一个Dc,然后加载位图,调试的时候发现消耗时间太多了,于是得出这条结论。
注意二、在有些时候,BitBlt效率并没有我们想象的那么高,它可能执行一次需要零点几毫秒。也有可能执行一次需要几十毫秒。网上说是由于线程切换的原因,我感觉似乎不太对。
下面有段代码:
BOOL CMerchantDlg::OnEraseBkgnd(CDC* pDC){CClientDC dc(this);int i=GetTickCount();//dc.BitBlt(clipRect.left,clipRect.top,clipRect.Width(),clipRect.Height(),m_dBuf,clipRect.left,clipRect.top,SRCCOPY);//copy mem dc to client dc//pDC->BitBlt(0,0,800,650,m_dBuf,0,0,SRCCOPY);dc.BitBlt(0,0,800,650,m_dBuf,0,0,SRCCOPY);int j=GetTickCount();CString str;str.Format(_T("%d"),j-i);MessageBox(str);return true;//return CDialogEx::OnEraseBkgnd(pDC);}
m_dBuf:是我封装的一个双缓冲类的一个对象,内存中已经有需要绘制的数据。
但执行上面的函数时候,需要的时间 90%以上都是15ms,其他时候是0(就是说时间非常少)。
但是我用pDc的时候,90%以上是0ms.其他事15ms左右。
对于这个问题我还不知道具体原因,希望高手看到之后帮忙解答一下。谢谢
- 双缓冲使用注意事项
- 使用CImage双缓冲
- 使用双缓冲显示位图
- 使用双缓冲技术绘制曲线图
- 双缓冲技术的简单使用
- 在symbian上使用双缓冲
- C#: GDI+双缓冲技术的使用
- VC 绘图,使用双缓冲技术实现
- VC 绘图,使用双缓冲技术实现
- VC 绘图,使用双缓冲技术实现
- 在SurfaceView中使用双缓冲
- 如何让子窗口使用双缓冲
- VC 绘图,使用双缓冲技术实现
- VC 绘图,使用双缓冲技术实现
- VC 绘图,使用双缓冲技术实现
- Java双缓冲技术基本使用
- 使用双缓冲技术实现简单画图板
- VC 绘图,使用双缓冲技术实现
- RailsCasts中文版,#25 SQL Injection 谨防SQL注入
- oracle零碎要点---oracle em的web访问地址忘了
- Jsoup示例
- 向arm开发板传递文件的方法
- HIVE 数据操作 DML
- 双缓冲使用注意事项
- windows vc资源文件使用
- RSA非对称算法加密相关内容
- linux静态链接库、动态链接库、动态加载 lib so使用学习
- [教程]发一个iPhone收发邮件设置(163、126邮箱)
- SQLServer2005 行转列(case when用法)
- [orz]一道题的神做法....
- 失眠与数据分析
- 幂问题