c++ - MFC 中 AddString 的性能缓慢

标签 c++ performance winapi mfc

<分区>

我有一个对话框,其中有几个较大的组合框(每个可能有数百个项目)。当这些被填充时,构建有明显的延迟(通过分析确认是它们)。

我最初的想法是排序会降低它的性能,但禁用排序并改用 InsertString 似乎并没有使事情变得更好。我没想到它看起来像是过多的项目 - 我应该在这里做或考虑其他事情吗?

MFC 调用是对 Win32 消息调用的简单包装,因此我认为那里没有任何重大开销。

重复 How to load a large array of strings in to an MFC combobox control fast as possible?

最佳答案

您应该在添加周围使用 CWnd::SetRedraw,以防止控件在每次添加后更新其所有内部状态。

如果你还没有这样做,那就这样做:

combo.SetRedraw(FALSE);

...  All the adds

combo.SetRedraw(TRUE);
combo.Invalidate();

您还应该考虑使用 CComboBox::InitStorage函数,它为组合框预分配内存。

关于c++ - MFC 中 AddString 的性能缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/276847/

相关文章:

C++链表在删除具有重复值的节点时会出现段错误

windows - VB 6应用程序如何确定它是否在Windows 10上运行?

winapi - Windows 静态控制如何阻止输入焦点

java - 如何在 Java 中以高效的方式进行多个 API 调用

c++ - 如何在 Win32 应用程序中通过 C++/MFC 在鼠标光标处显示动态文本

c++ - 哪个版本的 Windows SDK 使用 xinput1_3.dll?

C++我在所有标题中都使用了一个函数

c++ - wglCreateContext GetLastError() 0xc007001f

sql - Oracle 11g - 如何优化慢速并行插入选择?

c++ - 哪个更有效 : Return a value vs. 通过引用传递?