如何提高填充大量树视图的性能?

2023-12-19

首先,我正在以问答方式回答我自己的问题,所以我不一定需要任何人来回答这个问题。这是我学到的东西,很多人都可以利用它。

我有一个由许多不同节点组成的树视图。每个节点的后面都有一个对象Data属性,对象引用一个对象主列表中的不同层次结构级别,该列表相当大(数千个项目)。一个节点代表该主要列出对象上的特定属性,其中树允许用户选择一个节点来查看属于该特定选定类别的那些项目。

当树被填充时,它变得非常耗时(在某些情况下需要 2 分钟),因为每个节点都需要迭代这个大列表中的每个项目,并找到该列表中属于任何给定节点的每个项目。因此,如果这棵树中有 500 个节点,那么它会迭代这个大列表 500 次。总共有 3 个级别的层次结构 - 加载第二个和第三个级别时会出现性能瓶颈,但第一个级别简单且快速。

现在没有任何选项可以提高迭代此列表数百次的性能。我想知道是否有任何已知的技巧可以提高填充树视图的性能?

目前它的工作原理如下:

var
  X: Integer;
  N: TTreeNode;
  O: TMyObject;
begin
  for X := 0 to MyObjectList.Count - 1 do begin
    O:= TMyObject(MyObjectList[X]); //Object which Node represents
    N:= TreeView.Items.AddChild(nil, O.Caption);
    N.Data:= O;
    LoadNextLevel(N); //Populates child nodes by iterating through master list again
  end;
end;

每个附加级别都有类似的方法。

PS - 层次结构的第一级由其自己的单独列表(大约 50 个对象)填充,而第二级和第三级由主列表中数千个对象的属性填充。这就是为什么第一级加载很快,而其余的加载很慢的原因。


如果你真的关心填充大量树视图的速度,你应该研究 virtualTreeView (http://code.google.com/p/virtual-treeview/ http://code.google.com/p/virtual-treeview/).
它是一个开源树视图,专门设计为虚拟的,并最大限度地提高大型树视图的速度/内存。
这是一个了不起的组件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何提高填充大量树视图的性能? 的相关文章

  • 如何使带有两个for循环的python代码运行得更快(有没有一种python方法可以进行Mathematica的并行化)?

    我对 python 或任何此类编程语言完全陌生 我对 Mathematica 有一些经验 我有一个数学问题 虽然 Mathematica 用她自己的 并行化 方法解决了这个问题 但在使用所有核心后 系统却变得非常疲惫 在跑步过程中我几乎无法
  • 在 python 中高效、快速地迭代元组列表中超过 3600 万个项目

    首先 在任何人将其标记为重复之前 请阅读以下内容 我不确定迭代的延迟是否是由于尺寸巨大或我的逻辑造成的 我有一个必须迭代的用例3600 万件商品在元组列表中 我的主要要求是速度和效率 样本清单 how are you I am fine h
  • Async InputQuery 不处理“取消”按钮

    我正在使用一个简单的调用TDialogServiceAsync InputQuery 使用单个输入 它只是忽略了Cancel按钮和窗口的X关闭按钮 But the Ok按钮工作正常 这是我的代码 uses FMX DialogService
  • 加快 pandas groupby 中的滚动总和计算

    我想按组计算大量组的滚动总和 但我很难快速地完成它 Pandas 内置了滚动和展开计算器的方法 这是一个例子 import pandas as pd import numpy as np obs per g 20 g 10000 obs g
  • SQL 中的 JOIN 成本有多高?和/或,性能和标准化之间的权衡是什么?

    我发现了一个类似的线程 但它并没有真正抓住我想要问的本质 所以我创建了一个新线程 我知道规范化和性能之间存在权衡 我想知道划定这条线的最佳实践是什么 在我的特定情况下 我有一个消息传递系统 它具有三个不同的表 messages thread
  • RMI 有多快?

    我看到过这样的问题 两个独立的 Java 桌面应用程序之间的通信 https stackoverflow com questions 1680898 communication between two separate java deskt
  • 德尔福数据结构

    我可能需要在 Delphi 中做一个项目 并且是该领域的初学者 目前 我正在网上搜索资源 但由于资源站点太少而感到困惑 首先 你能给我一些好的网站 其中包含我迄今为止错过的 Delphi 资源吗 我也在 Delphi 中搜索数据结构 想知道
  • 为什么直接内存“数组”的清除速度比通常的 Java 数组慢?

    我建立了一个 JMH 基准来衡量什么会更快Arrays fill与空 System arraycopy从空数组中 将 DirectByteBuffer 归零或将unsafe内存块试图回答这个问题question https stackove
  • 如何遍历任意给定集合中的枚举?

    我有很多枚举类型 它们与相应的集合相结合 例如 type TMyEnum meOne meTwo meThree TMyEnums set of TMyEnum 我正在尝试提出一组可以运行的函数any枚举集 而不是为每个枚举编写单独的函数
  • 有人用CrossKylix进行真正的跨平台开发吗?

    新版本克罗斯凯利克斯 http crosskylix untergrund net 两周前更新过 即使 Kylix 已经停产很久了 但它似乎仍然被一些 Delphi 开发人员使用 有人在 Windows 和 Linux 的跨平台开发中成功使
  • MySQL InnoDB 查询性能

    我正在尝试优化一个简单的 sql 查询 该查询将多次运行大量数据 这是场景 MySQL 与 InnoDB 表 where 和 join 中使用的所有字段都已索引 表有 FK 我不需要查询的整个缓存 但每个表的缓存是可能的 表有更多的更新 插
  • 去除字符串的最佳方法是什么?

    我需要具有最佳性能的想法来删除 过滤字符串 I have string Input view 512 3 159 删除 view 和 的最佳性能方法是什么 和引号 我可以做这个 Input Input Replace view Replac
  • 如何在 Delphi DBLookupComboBox 中选择正确的项目

    我有一个数据库查找组合框连接到数据库查询 那部分工作正常 当我运行程序时数据库查找组合框填充有查询的结果 我想看看数据库查找组合框填充第一项 请选择 当 的时候程序第一次运行或者当一个新项目行动已启动 见下图 另外 如果我正在加载以前保存的
  • 为什么 Android Eclipse 不断刷新外部文件夹并花费很长时间?

    我只有一部新的 Android 手机 我一直在修补一些基本的应用程序 每当我保存任何内容时 Eclipse 的 Android 插件就会刷新外部文件夹 这让我抓狂 通常我不会介意 但当需要 10 秒才能刷新时 我开始注意到 我已经搜索过 其
  • 如何有效地从 DB2 表中删除所有行

    我有一个大约有 50 万行的表 我想删除所有行 如果我做简单的delete from tbl 事务日志已满 我不关心这种情况下的事务 无论如何我都不想回滚 我可以删除许多事务中的行 但是有更好的方法吗 如何有效地从 DB2 中的表中删除所有
  • 不断断点?如何去除它们?

    我下载了一个用Delphi 2009制作的项目 这也是我使用的 但是有一个断点我无法删除 如果我尝试删除它 它会在程序执行后再次执行 我在其他调试器中遇到了这样的事情 称为硬件断点 但这并不重要 如何删除断点 EDIT Article ht
  • 对于双核手机,availableProcessors() 返回 1

    我最近购买了一部 Moto Atrix 2 手机 当我尝试查看手机中的处理器规格时 Runtime getRuntime availableProcessors 返回 1 proc cpuinfo 也仅包含有关处理器 0 的信息 出于好奇
  • .NET 中 UniqueQueue 和 UniqueReplacementQueue 集合最有效的实现

    考虑到入队和出队操作的速度同样重要 NET 中 UniqueQueue 和 UniqueReplacementQueue 集合最有效 就速度而言 的实现是什么 UniqueQueue是一个不可能出现重复的队列 因此 如果我将一个元素推送到队
  • 这个 cProfile 结果告诉我需要修复什么?

    我想提高Python脚本的性能并且一直在使用cProfile生成性能报告 python m cProfile o chrX prof bgchr py args 我打开这个chrX prof使用 Python 的文件pstats并打印出统计
  • 当responseText包含有效的Xml时,IXMLHttpRequest.responseXml为空,没有解析错误

    我正在从中获取一些 XML政府网站 http www bankofcanada ca stats assets rates rss noon en all xml http www bankofcanada ca stats assets

随机推荐

  • 确保 pandas MultiIndex 中的字典顺序

    我得到了一些带有 MultiIndex 的数据 一些计时统计数据 其中包含 设备 构建配置 测试功能 等的索引级别 我想切掉其中一些索引列 看来 loc 函数的 切片器 可能是可行的方法 但是 那docs http pandas pydat
  • 如何使用 docker run 中传递的动态值通过 Dockerfile 创建属性文件?

    我对 Docker 还比较陌生 也许这是一个愚蠢的问题 我的目标是创建一个具有system properties文件 顾名思义 是一个带有键值对的属性文件 我想填写这个文件中的值动态地 所以我认为这些值需要作为环境变量传递给 Docker
  • 迭代按键排序的字典中的键/值对

    我有以下代码 它只打印字典中的键 值对 这些对按键排序 for word count in sorted count words filename items print word count 然而 调用iteritems 代替items
  • IntelliJ IDEA“自动构建项目”显然不起作用

    我是 Java Eclipse 的长期用户 并且习惯于在我引起编译错误和警告时立即在 问题 视图中看到这些错误和警告 现在我正在使用 IntelliJ IDEA Kotlin 和 Java 有一个 问题 视图 但即使代码窗口的边缘显示错误或
  • 无法在 Spring Boot 中使用 java.util.Duration 作为 @Value 配置

    我们无法在 Spring Boot 中使用 java util Duration 作为 Value 配置 此处展示此问题的示例项目 https github com costimuraru spring boot sample https
  • 为什么当 DataGrid 更改时我的 ViewModel 中的属性没有更新?

    我正在尝试创建一个 UserControl 它可以让我编辑类型的字典Dictionary
  • 是否可以使用 CRC 进行基本的纠错?

    我知道使用 CRC 的全部目的是进行错误检测 但我听到有人说它除了错误检测之外还可以用于进行基本的错误纠正 我很好奇是否是这样 如果是的话 它的威力有多大 我的意思是 我们通常将 CRC 称为能够执行 x 位检测 但我很好奇它是否能够执行
  • Java中如何从域名获取IP地址?

    我正在编写一个需要 IP 地址的应用程序 我有一个域名 我想知道如何从中获取 IP 地址 例如 www girionjava com 如何通过Java编程获取该网站的IP地址 谢谢 InetAddress giriAddress java
  • 箭头键输入代码在 tkinter 中不起作用

    以下是我的简短脚本 当按住这些箭头键时 它的意思是从右向左和向上打印 但我不知道为什么它不起作用 import Tkinter as tk right False left False up False def keyPressed eve
  • php-ga:如何识别自然流量?

    我正在做所有的 Google Analytics 服务器端工作 但 GA 仅跟踪直接或推荐 而且我不知道如何跟踪有机 这是一段可以直接获取或引用的代码 Campaign is used for the referrals If not in
  • 编译 create-react-app 时出现构建错误

    我是 Reactjs 的新手 正在开始学习它 我一直在尝试启动一个基本的 hello world 程序 但它在编译级别失败 使用 create react app hello world 创建了一个启动 hello word 程序 它给了我
  • 播放 YouTube 视频时出现错误“网络 [400] 出现问题”

    我正在使用 Android You tube API 播放 you Tube 视频 某些 URL 工作正常 但在某些 URL 中 我在屏幕上发现错误消息 显示 网络出现问题 400 点击重试 互联网已连接 请帮助我 提前致谢 This li
  • 如何在 Swift 中将十进制数转换为二进制数?

    如何在 Swift 中将 Int 转换为 UInt8 例子 我想将数字 22 转换为 0b00010110 var decimal 22 var binary UInt8 What should I write here 您可以将十进制值转
  • 我们如何从远程资源管理器中删除 ssh 目标

    远程资源管理器侧边栏有一个明显的图标 用于添加新目标 但我找不到用于删除或编辑目标的选项 就我而言 服务器的 IP 经常更改 因此它们只是继续在侧边栏中添加 现在有清理方法 目标是否存储在我可以手动编辑的文件中 您可以通过编辑删除或编辑它
  • 合并不同维度 r 的列表元素[重复]

    这个问题在这里已经有答案了 我有一个 df df data frame year c rep 2018 4 rep 2017 3 Area c 1 4 1 3 P 1 7 N 1 7 我想按年份将其拆分 然后再次将所有内容合并在一起 以便我
  • 绘制圆角矩形时出现透明度问题

    我正在尝试使用我在教程中找到的一些代码绘制带圆角的矩形 我稍作修改 Rounded rectangle algorithm copied from http ju outofmemory cn entry 18060 def round c
  • 使用 urllib2 时出现“TypeError: a float is required”

    我正在关注推特 API 文档 https dev twitter com docs auth application only auth发出仅限应用程序的请求 执行时发生错误第2步 获取不记名令牌 我不熟悉回溯中这些模块的详细信息 有人可以
  • 如果函数没有显式使用“ret”,为什么没有返回值

    我有以下程序 SECTION text main mov ebx 10 mov ecx 50 repeat inc ebx loop repeat mov eax ebx ret 当该程序运行时 它按预期返回 60 然而 如果你放弃了最后的
  • Cloudant 和 CouchOne 之间的区别?

    我想知道 Cloudant 和 CouchOne 之间有什么区别 好问题 我的快速回答 CouchOne 由 CouchDB Apache 项目的创始人 Damien Katz 领导 CouchOne 现在专注于缩小 couchdb 的规模
  • 如何提高填充大量树视图的性能?

    首先 我正在以问答方式回答我自己的问题 所以我不一定需要任何人来回答这个问题 这是我学到的东西 很多人都可以利用它 我有一个由许多不同节点组成的树视图 每个节点的后面都有一个对象Data属性 对象引用一个对象主列表中的不同层次结构级别 该列