1百万行的ListView

我有一个SysListView32 ,应该可能主持数百万行,三列文本A,B,C每个<256个字符。

比方说,B列有许多重复(例如:列A是文件名,列B是path,每行是文件系统的文件),并且只有100k个不同的值(而不是几百万)。

是否有可能避免在ListView GUI元素的列B的内容的RAM中重复?

我们可以只用指向数组元素的指针来填充一个ListView (取自列B的不同值的100k-元素数组),而不是重复的数据?

如何修改这个使它工作?

 LV_ITEM item; item.mask = LVIF_TEXT; item.pszText = "Hello"; ... ListView_SetItem(hList, &item); 

Solutions Collecting From Web of "1百万行的ListView"

你所需要的也被称为“虚拟列表”。 虚拟列表控件是具有LVS_OWNERDATA样式的列表视图控件。 该样式使控件能够支持最多DWORD的项目数(默认项目数仅扩展到一个int)。 然而,这种风格所提供的最大优势是在任何时候都只能在内存中拥有一部分数据项。 这允许虚拟列表视图控件适用于大型数据库的信息,其中访问数据的具体方法已经就位。 对于给定的一组数据(列表或动态数组),您需要执行以下步骤:

  1. 将LVS_OWNERDATA样式添加到您的ListView
  2. 调用CListCtrl :: SetItemCount传递数据源大小,如std :: vector :: size()。
  3. 捕获LVN_GETDISPINFO通知。 这是将数据呈现到ListCtrl中的位置。

请查看我添加的附加链接,以获取更多信息和示例代码。 如果您使用CListView,则可以使用GetListCtrl访问CListCtrl。

链接:

虚拟列表控件

使用虚拟列表