数据量大时,ListView更新更快的方法

手写Custom Adapter:ListView在2024年高性能实践指南 ListView作为Android原生滚动容器,其核心价值在于极简渲染路径、低内存占用与确定性性能表现。它并非过时技术,而是面向固定结构、高敏感场景(如医保结算、政务审批)的轻量级视图映射方案。Custom Adapter通过ViewHolder模式消除findViewById开销、数据契约解耦绑定逻辑、生命周期感知规避BadTokenException,显著提升列表响应速度与稳定性。相比ArrayAdapter的全量刷新陷阱,自定义实现支持精准通知(notifyItemChanged)、复用路径优化及业务 阅读详情
 采用常规方法处理ListView,在数据量大时无论是还是用了BeginUpdata和EndUpdata()还是处理WM_EraseBkgnd信息都不会得到理想的效果,那答案是什么呢?
嗯,采用所谓Virtual ListView。
说起来很神秘,其实点通了很简单。
在于把ListView->OwnerData设为true,然后直接设置
ListView->Items->Count为数据总数,实际的数据可以保在任意其它速度较快且可直接索引的容器里(如STL中的 vector),然后关键是在OnData事件中写入代码通过Item->Index从容器中(如vector)取出数据,然后用
Item->Caption = ???;
Item->SubItems->Add(???);
Item->SubItems->Add(???);
来动态的写入数据到ListView用于UI显示,如此Virtual ListView即完成.
一个完整的简单例子如下:
/*Unit1.h*/
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <forms.hpp>
#include <ComCtrls.hpp>
#include <vector>
using namespace std;
//---------------------------------------------------------------------------
struct ListViewData
{
AnsiString Caption;
AnsiString SubItems1;
AnsiString SubItems2;
AnsiString SubItems3;
};
class Tform1 : public Tform
{
__published:// IDE-managed Components
TListView *ListView1;
void __fastcall ListView1Data(TObject *Sender, TListItem *Item);
private:// User declarations
vector<ListViewData*> m_lvDataVector;
public:// User declarations
__fastcall Tform1(TComponent* Owner);
__fastcall ~Tform1();
};
//---------------------------------------------------------------------------
extern PACKAGE Tform1 *form1;
//---------------------------------------------------------------------------
#endif

/*unit1.cpp*/
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
Tform1 *form1;
//---------------------------------------------------------------------------
__fastcall Tform1::Tform1(TComponent* Owner)
: Tform(Owner)
{
ListView1->OwnerData = true;
const int iListViewCount = 5000;
ListView1->Items->Count = iListViewCount;
for(int i = 0; i < iListViewCount; ++i) {
ListViewData *plvData = new ListViewData;
plvData->Caption = "Caption" + AnsiString(i);
plvData->SubItems1 = "SubItems1" + AnsiString(i);
plvData->SubItems2 = "SubItems2" + AnsiString(i);
plvData->SubItems3 = "SubItems3" + AnsiString(i);
m_lvDataVector.push_back(plvData);
}
}

__fastcall Tform1::~Tform1()
{
int iCount = ListView1->Items->Count;
for(int i = 0; i < iCount; ++i) {
ListViewData *plvData = m_lvDataVector[i];
delete plvData;
}
}
//---------------------------------------------------------------------------

void __fastcall Tform1::ListView1Data(TObject *Sender, TListItem *Item)
{
ListViewData *plvData = m_lvDataVector[Item->Index];
Item->Caption = plvData->Caption;
Item->SubItems->Add(plvData->SubItems1);
Item->SubItems->Add(plvData->SubItems2);
Item->SubItems->Add(plvData->SubItems3);
}
//---------------------------------------------------------------------------


btw,cker指点:
我现在觉得tlistview 和 tTreeView比较烂。
最近正在熟悉一个号称最好的Tree和list控件,非常的棒。开放源码,
www.delphi-gems.com的virtual trees
同样是使用所谓的Virtual技术....,这个控件是我接触BCB和Delphi以来见过的最好的控件。
WPF高级数据绑定与触发器:MultiBinding、MultiTrigger与MultiDataTrigger实战详解 在WPF开发中,数据绑定和触发器是实现动态、响应式用户界面的核心技术。数据绑定建立了数据源与UI元素之间的桥梁,而触发器则允许在特定条件满足时自动改变控件的外观或行为。其技术价值在于实现了UI与业务逻辑的解耦,提升了应用的可维护性和用户体验。在实际开发中,简单的绑定和触发器往往难以应对复杂的业务规则,例如需要同时满足多个条件才能启用按钮,或根据多个数据字段共同决定视觉样式。这时,就需要用到更高级的多值绑定与多条件触发器技术。本文聚焦于WPF中的MultiBinding、MultiTrigger和MultiD 阅读详情

相关推荐

Android随笔-SparseArray

SparseArray是Android提供的稀疏数组实现,采用双数组结构(int[]+Object[])替代HashMap<Integer,Object>,避免自动装箱开销。其核心特点包括:1)基于二分查找实现O(log n)查询;2)采用懒删除机制(标记DELETED)和定期压缩;3)初始容量4,按1.5倍扩容;4)内存占用仅为HashMap的35%-15%,特别适合小数据量(<1000)场景。与HashMap相比,SparseArray节省了Entry对象和Integer装箱开销,但牺牲了查询效率,适合

古典码 526

Delphi ListView快速操作通用设计与实现

Delphi ListView快速操作通用实现 作者:成晓旭 众所周知,Delphi ListView类直接进行Add、Update、Delete操作的速度是比较慢的,尤其是当数据量较大时,比如数据量达到5000、10000、50000时,速度真是可以说是“慢得惊人”。其实快速操作的方法非常简单,就当大家都知道了。在本人的工作中,很多项目都用到ListView,并且对速度的响应

IT旁观者 8285

Cocos2d-x Lua手游聊天系统:从TCP长连接到滚动列表的完整实现

在游戏开发中,网络通信是支撑实时交互的核心技术,其原理基于客户端与服务器之间建立稳定、高效的数据通道。TCP长连接作为一种可靠的传输协议,通过保持持续的连接状态,避免了HTTP短连接频繁建立与断开的开销,特别适合聊天、实时对战等高频率、低延迟的应用场景。其技术价值在于为游戏提供了稳定、有序的数据流,确保了消息的可靠送达,是构建实时社交功能的基础。在Cocos2d-x Lua这类轻量级跨平台引擎中,结合自定义的二进制数据包协议,开发者可以高效地处理网络层的粘包、拆包与心跳机制,从而构建出响应迅速的游戏内通信模

weixin_30596165的博客 447

Delphi XE7 beta1的新功能之TListView滑动刷新数据功能

介绍 本文章介绍了Delphi XE7 beta1的新功能之Pull To Refresh,Delphi XE7 为TListView增加划动刷新数据的功。 设置ListView的属性:PullToRefresh=True 然后处理ListViewPullRefresh事件,下面是示例代码 procedure TForm1.ListView1PullRefres

newsxy的专栏 2772

VB ListView控件的数据分页实现方法

分页是一种在数据量大到不能一次性加载到内存中展示时的处理方式,它允许用户通过分隔数据来逐步查看。分页可以提高应用程序的性能,同时提升用户体验。分页机制在Web应用和移动应用中尤为常见,特别是在社交媒体、搜索引擎结果页面以及电子商务网站。分页的应用场景涵盖了从简单列表到复杂数据的展示,例如,一个用于显示用户评论列表的系统,或一个需要展示大量搜索结果的查询接口。通过使用分页,应用程序可以高效地管理内存,减少不必要的数据传输,以及提供更好的用户交互体验。

weixin_31860973的博客 378

ListView快速显示100万条数据用时1秒

ListView快速显示100万条数据用时1秒 最精简单代码演示快速显示

[转]Delphi ListView快速操作通用实现

Delphi ListView快速操作通用实现   2009-09-21 02:47:44|  分类: 软件开发 |  标签: |字号大中小 订阅 众所周知,Delphi ListView类直接进行Add、Update、Delete操作的速度是比较慢的,尤其是当数据量较大时,比如数据量达到5000、10000、50000时,速度真是可以说是“慢得惊人”。其实

zgp的专栏 1028

告别ROS1思维:在ROS2 Humble上,用Python搞定MoveIt2机械臂控制的完整流程

本文详细介绍了在ROS2 Humble环境下使用Python控制MoveIt2机械臂的完整流程。从环境配置、架构变革到实战操作,涵盖URDF适配、Action接口编程及性能优化技巧,帮助开发者高效迁移ROS1项目至ROS2平台,实现工业级机械臂控制。

weixin_30352645的博客 449

android listview 滑动优化,ListView的优化,提高ListView滚动速度

在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建。ListView加载数据都是在public View getView(int position,View conver...

weixin_27890975的博客 377

Streamlit安装避坑指南:从零到一键启动你的第一个数据可视化应用

本文提供了一份详尽的Streamlit安装避坑指南,帮助用户从零开始快速启动第一个数据可视化应用。文章深入剖析了安装过程中常见的网络超时、依赖冲突、环境变量缺失等核心问题,并给出了使用虚拟环境、配置国内镜像源、利用.whl文件离线安装等多种经过验证的解决方案,确保安装过程顺畅无阻。

weixin_29065015的博客 614

高通SA8155P车载Camera开发避坑指南:从硬件拓扑到AIS服务调试全流程

本文详细解析了高通SA8155P车载Camera开发全流程,从硬件拓扑设计到AIS(Automotive Imaging System)服务调试,涵盖关键组件配置、软件架构剖析及高级调试技巧。通过实战经验分享,帮助开发者避开常见陷阱,优化系统性能,适用于智能驾驶系统的环境感知开发。

weixin_42550597的博客 331

IndexableListView: 提高Android ListView的可读性和易用性

IndexableListView: 提高Android ListView的可读性和易用性 简介 在开发Android应用时,ListView是一种常见的组件,用于显示大量的数据列表。然而,默认的ListView在处理大量数据时可能会出现性能问题,并且不支持快速索引。为了解决这些问题,我们推出了IndexableListView。 IndexableListView是一个基于ListView的自定...

gitblog_00092的博客 537

从 VS Code 登录 ABAP Destination,一次把前后端连接跑通

最近很多 ABAP 开发者开始把 VS Code 纳入日常开发环境,原因很直接,VS Code 的轻量体验、命令面板、文件树、插件生态和 AI 编程能力,已经深深影响了现代开发者的工作方式。SAP 官方发布的 ABAP Development Tools for VS Code,也把 ABAP Cloud 开发模型带进了这个编辑器里。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 221

React Native Immutable ListView:提升列表性能的利器

React Native Immutable ListView:提升列表性能的利器 在移动应用开发中,列表组件是不可或缺的一部分。然而,随着数据量的增加和交互的复杂化,传统的列表组件可能会遇到性能瓶颈。为了解决这一问题,React Native Immutable ListView应运而生。本文将详细介绍这一开源项目的功能、技术特点以及应用场景,帮助开发者更好地理解和使用它。 项目介绍 React...

gitblog_00429的博客 1276

【前端圭臬】二:你知道的和不知道的 HTML

关于 HTML,说几个你可能不太关注的问题。

Evan 的博客 4757

代谢组数据分析(四):多种差异分析方法筛选代谢物标记物

本文详细介绍了代谢组学中常用的差异分析方法,包括倍数变化法、T检验、VIP值在OPLS-DA中的应用。通过这些方法,研究者能够筛选出在不同组别间具有显著差异的代谢物,为疾病诊断和治疗提供线索。文章还提供了一个整合的R函数run_metabolomeDA,便于研究人员进行一站式差异分析,并展示了如何生成火山图来可视化结果。

专注生信领域 6770

emWin实战:LISTVIEW与LISTWHEEL控件高级应用与性能优化

在嵌入式GUI开发中,列表控件是构建高效人机界面的核心组件,其核心原理在于对有限内存资源下的数据组织与渲染优化。通过合理的数据结构管理和事件驱动机制,开发者能够实现流畅的数据展示与交互体验,这对于提升嵌入式产品的易用性和响应速度具有重要技术价值。在工业控制、智能家居、医疗设备等应用场景中,列表控件常用于参数设置、日志查看和选项选择等界面。本文聚焦emWin图形库中的LISTVIEW和LISTWHEEL两个关键控件,深入探讨其高级数据绑定、自定义绘制以及滚动交互优化等实战技巧,特别是通过LISTVIEW_Se

caodaoxi的专栏 679

C#利用最小二乘法拟合任意次函数曲线

给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。因此,我们需要一种新的逼近原函数的手段: ①不要求过所有的点(可以消除误差影响);②尽可能表现数据的趋势,靠近这些点。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小 [1],其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达,具体可以查阅相关资料。最小二乘法(又称最小平方法)是一种数学技术。

qq_30725967的博客 3755

嵌入式GUI开发实战:emWin LISTVIEW控件排序功能深度解析

在嵌入式系统开发中,数据展示是人机交互的核心需求,而列表视图控件是实现结构化数据清晰呈现的关键技术。其工作原理基于表格化数据模型,通过封装表头、滚动和选择等通用逻辑,为资源受限的嵌入式设备提供了高效的界面解决方案。该控件的技术价值在于显著提升开发效率与界面专业度,尤其适用于工业监控、医疗仪器和消费电子等需要复杂数据交互的应用场景。本文聚焦emWin图形库中的LISTVIEW控件,深入剖析其多列数据排序的实现机制,涵盖从基础配置到自定义比较函数的完整实践路径,并针对排序功能与数据索引映射等常见问题提供解决方案

weixin_34168880的博客 369

高通GAIA V3命令参考手册的研读学习(15):自定制命令的详细工作描述

里的示例一样,手机APP发出这个GetManuFacturer的命令发0x0000,那么耳机回复:0x8000, 同时在回复的playload部分,用最多15个字节的ACSII码来表达制造商信息(因此最多15个字母)。那么这个APP在通过GAIA协议控制这个耳机时,不仅可以通过前面讲过的vendor ID来识别,也可以更进一步通过这个命令来识别这个耳机,到底是不是本公司的。通过这个可变长度的playload,真的是可以传达极多的事先约定的信息,相当的灵活,真是不错!这个命令用来得到设备的制造商信息。

qq_37191547的博客 397

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Flutter for OpenHarmony 教育百科实战:国家列表

国家列表页面通过一次性加载200多个国家和地区数据实现本地快速搜索,优化用户体验。采用双列表设计(_countries存储原始数据,_filteredCountries存储搜索结果),支持实时搜索过滤(每输入一个字符立即更新)。页面包含搜索框、国家列表(显示国旗、国名、首都和地区)和空状态提示,数据按国名排序便于浏览。这种本地处理方案避免了频繁网络请求,确保搜索响应迅速流畅。

2501_94022192的博客 758

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

鸿蒙 ArkUI 列表底部加载更多指示器实现详解

本文详细介绍了在鸿蒙ArkUI中如何实现列表底部的加载更多指示器,并与Flutter的ListView.builder方案进行了对比。文章从分页加载的基本概念讲起,分析了底部加载指示器的设计目标,并通过具体代码示例展示了鸿蒙ArkUI的实现方法。 核心内容包括: 分页加载的基本原理和两种交互模式(显式/隐式) 鸿蒙ArkUI与Flutter在列表组件上的关键差异对比 状态变量设计(搜索关键词、数据源、分页状态等) 数据加载逻辑的实现细节 滚动监听触发加载的机制 实现要点总结: 使用@State装饰器管理响应

woshi_xiaoa的博客 375

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

第五章 SQLite数据库

第五章 SQLite数据库 SQLite数据库用于储存程序中的大量数据量数据,并对数据进行管理和维护。 5.1 SQLite数据库简介 ​ SQLite数据库是一个轻量级数据库。它的设计目标时嵌入式的,而且占用资源非常低,在内存中只需要几百KB的储存空间。SQLite是遵循ACID的关系型数据库管理系统,ACID是指 原子性, 一致性, 隔离性, 持久性。比起MYSQL,PostGreSQL这两款开源数据库管理系统来说,SQLite的处理速度更快。 ​ SQLite没有服务器进程,它通过文件保存数据,该

Little Big Us的博客 599

react-native-meteor性能优化指南:提升实时应用响应速度的10个技巧

react-native-meteor是一款为React Native应用提供Meteor响应式功能的强大库,能帮助开发者轻松构建实时数据驱动的移动应用。然而,随着应用复杂度提升,性能问题可能会影响用户体验。本文将分享10个实用技巧,帮助你优化react-native-meteor应用性能,显著提升实时响应速度。 ## 1. 使用composeWithTracker替代createContain

gitblog_01414的博客 279

基于HarmonyOS API 24条件渲染的方式是声明式 UI 中控制元素显示隐藏的惯用模式,相比于通过 visibility 属性控制,条件渲染在元素不需要显示时不会创建对应的节点

在移动互联网与智能穿戴设备高度普及的今天,"习惯养成"已经从一个模糊的自我管理理念,演变为一个可量化、可追踪、可视化的数字化产品赛道。越来越多的人希望借助手中的智能终端,把"早起、冥想、阅读、运动"这些抽象的自律行为,转化为一条条清晰的数据曲线和一张张可触摸的打卡卡片。而鸿蒙生态(HarmonyOS)凭借其跨设备协同、分布式软总线以及声明式 UI 开发框架 ArkUI,为这类注重"轻量化交互 + 即时反馈"的生活方式类应用提供了极为理想的生长土壤。本应用正是一款面向"晨间场景"深度打磨的习惯追踪工具。它聚焦

2401_86031952的博客 491
上一篇: 用API改进ListView显示效果
下一篇: VB中给listview的item添加多行气泡式Tooltip
xmlscript
博客等级 码龄25年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值