我有一个带有经典Doc / View架构的MFC应用程序。作为性能测试,我实现了非常简单的绘制过程,绘制弧并将这些弧存储在该应用程序的文档中。
struct CArc
{
CRect rectClient;
};
问题在于,当我达到10k这些非常简单的原语时,程序就会变得无法响应。对于GDI和这么多原语来说这是正常的还是我做错了什么?
void CUndo_RedoView::OnDraw(CDC* pDC)
{
pDoc_ = GetDocument();
ASSERT_VALID(pDoc_);
if (!pDoc_)
return;
for (const auto& x : pDoc_->arcs_)//arcs_ is a vector<CArc>
{
pDC->Arc(x.rectClient,
CPoint(x.rectClient.right, x.rectClient.CenterPoint().y),
CPoint(x.rectClient.CenterPoint().x, x.rectClient.right));
}
// TODO: add draw code for native data here
}
答案 0 :(得分:0)
GDI很慢。
首选方法是使用内存DC,如MFC的CMemDC(https://msdn.microsoft.com/en-us/library/cc308997(v=vs.90).aspx),只有在实际修改图像时才能渲染图像。然后BitBlt你下一次OnPaint调用中的缓存图像
如果您仍遇到性能问题,请考虑查看GDI +或DirectX