为什么当我绘制大量 (~10k) 简单基元时 GDI 变得无响应
Why does GDI become unresponsive when I draw a large number (~10k) of simple primitives?
我有一个具有经典文档/视图架构的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
}
GDI很慢。
首选方法是使用内存中的 DC,如 MFC 的 CMemDC (https://msdn.microsoft.com/en-us/library/cc308997(v=vs.90).aspx),仅在实际修改图像时才渲染图像,然后在下一次 OnPaint 调用中对缓存的图像进行 BitBlt
如果仍然遇到性能问题,请考虑查看 GDI+ 或 DirectX
相关文章:
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- C++ 信号和插槽不工作:插槽不响应事件
- NodeJs 服务器充斥着 UDP 广播,不发送响应
- C++关于ENUM的问题。我得到的响应比枚举列表大
- 应用程序在打开的简历中捕获视频后没有响应
- 使用 cpprest (Casablanca) 返回 PDF 响应
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 为什么当通过 TCP 发送的消息速率增加时,请求-响应消息对的延迟会降低?
- 如何使用从处理程序调度的最终回调将响应异步返回给调用方on_read?
- 获取加密的正文响应WinHttp HTTPS
- QtConcurrent - 在发布到 UI 线程的数千个结果中保持 GUI 响应
- 没有专用显卡的 Direct2D 与 GDI+
- GDI 绘制到外部窗口 (C++)
- 同步读取多个 TCP 响应
- HTTP 响应格式不正确?
- 如何使用软化工具包从 OPC UA 服务器异步读取操作回调中的数据值响应中获取 NodeId 详细信息
- HTTP帖子,无需等待响应
- 问题导致程序停止响应,并且姓氏未正确打印
- C++ WinAPI[GDI].自定义 gui 正确重绘
- 为什么当我绘制大量 (~10k) 简单基元时 GDI 变得无响应