最新要闻
- 男子嘉陵江非法捕捞渔获物20余斤 被依法采取强制措施
- 受强台风“卡努”影响 日本九州等地将出现暴风巨浪
- 载有3000辆汽车的滚轮船起火 劳斯莱斯:我们有车在上面
- P40/Mate 30率先用上!华为系统云翻新正式上线
- 大连理工回应挖姜男孩被录取:将全程帮扶 请大家放心
- 长白山人参母公司 鲜人参10支39.9元大促(减60元)
- 2023年河北省科普讲解大赛决赛举行
- 人民子弟兵连续30多小时接续奋战抢通救援通路 转移受困群众
- 说谎真会“遭报应”吗?研究表明:是真的!
- 抓住夏天的尾巴!保罗阿斯登冰丝长裤/短裤大促:券后仅39.9元
- 豪华SUV领克08预售 魅族20 PRO领克时间系列联名款手机正式亮相
- 深圳福田长途客运站(深圳福田长途汽车站)
- 国产3A大作!《黑神话:悟空》线下试玩报名结束:资格千万别出售
- 不叫问界叫智界?消息称华为奇瑞合作品牌曝光:首车搭载鸿蒙4.0
- AMD 12年老将Robert Hallock加盟Intel:职位更高级
- 哈佛教授称可能发现外星人存在证据:不明物体或残留地外科技
手机
![顺络电子:董事长部分股权办理股票质押业务](http://www.viltd.com/uploadfile/2022/0610/20220610103218963.jpg)
顺络电子:董事长部分股权办理股票质押业务
![深圳7月二手住宅成交2259套,中介称近期咨询客户开始增加](http://www.viltd.com/uploadfile/2022/0610/20220610103218963.jpg)
深圳7月二手住宅成交2259套,中介称近期咨询客户开始增加
- 顺络电子:董事长部分股权办理股票质押业务
- 深圳7月二手住宅成交2259套,中介称近期咨询客户开始增加
- 最新洪水形势如何?时隔多年为何又见洪水?解答来了!
- 李明俊在调研白龟湖科创新城和环湖路建设工作时强调 勇于担当负责 善于创新突破 着力打造群众满意的放心工程
- 遮天:东荒两大家族登场,庞博成为妖王,妖族公主颜如玉绝美登场
- 京运通: 我司自扩产硅片业务以来,所有单晶炉均为自供
家电
【QT性能优化】QT性能优化之QT6框架高性能模型视图代理框架千万级数据表分页查询优化
QT性能优化之QT6框架高性能模型视图代理框架千万级数据表分页查询优化
【资料图】
简介
本文介绍了QT模型视图代理框架中的QT表格控件和QT数据库模块中的QT数据库查询模型结合使用的一个应用实践案例:QT高性能表格控件分页展示千万行数据。本文介绍了这个应用实践案例的运行效果和源代码。这个应用实践案例实测运行表明,QT表格控件具备在3毫秒之内快速从1000万数据记录的SQLite数据库的一个数据表中查询读取10000记录的能力。 本文还介绍了QT表格控件和QT数据库模块的一些总体情况。本文最后通过QT框架的源代码调试运行分析了QT表格控件的性能为什么如此之高。
文章目录
- QT高性能表格控件分页展示百万行数据运行效果展示
- 系统配置
- 1000万条记录的数据表中一次读取1万条记录
- 1000万条记录的数据表中一次读取10万条记录
- 1000万条记录的数据表中一次读取100万条记录
- QT高性能表格控件分页展示百万行数据应用程序源代码
- QT初始化数据表代码:1000万条记录
- QT主界面代码
- QT表格控件
- QT图形视图框架整体介绍
- QT表格控件
- QT表格窗口
- QT数据库组件
- QT数据库模块整体介绍
- 用户界面层(UI Layer)
- SQL接口层(SQL API Layer)
- 驱动程序层(Driver Layer)
- QT表格控件的性能何以如此之高?
- 查询和遍历不是同一个概念
- 对预取数据的支持
- 还有更多数据记录吗?
正文
QT高性能表格控件分页展示百万行数据运行效果展示
系统配置
硬件配置: SSD。 操作系统: Windows。 数据库系统:SQLite数据库。 QT版本: QT。
1000万条记录的数据表中一次读取1万条记录
实测结果:1000万条记录的数据表中一次读取1万条记录,首次查询耗时小于3毫秒(ms=千分之一秒),后续查询耗时小于1毫秒。采用整数主键查询,主键在数据表中的位置对查询性能没有显著影响。
QT高性能表格控件1000万条记录的数据表中展示1万条记录
QT表格控件+QT数据库模块:1000万条记录的数据表中一次读取1万条记录
1000万条记录的数据表中一次读取10万条记录
实测结果:1000万条记录的数据表中一次读取10万条记录,首次查询耗时小于3毫秒(ms=千分之一秒),后续查询耗时小于1毫秒。
QT高性能表格控件1000万条记录的数据表中展示10万条记录
QT表格控件+QT数据库模块:1000万条记录的数据表中一次展示10万条记录
1000万条记录的数据表中一次读取100万条记录
实测结果:1000万条记录的数据表中一次读取100万条记录,首次查询耗时小于3毫秒(ms=千分之一秒),后续查询耗时小于1毫秒。
QT高性能表格控件1000万条记录的数据表中展示100万条记录
QT表格控件+QT数据库模块:1000万条记录的数据表中一次读取100万条记录 使用QT 模型视图代理框架实现1000完条记录的数据表中读取1000条记录的运行效果的视频参考如下:
视频: QT性能优化之QT6框架高性能模型视图代理框架千万级数据表分页查询优化效果
QT能否撑得起千万级数据表这样的规模?看完补天云这个实测视频就有答案了! QT性能优化之QT6框架高性能模型视图代理框架千万级数据表分页查询优化
QT高性能表格控件分页展示百万行数据应用程序源代码
为了减少本文的篇幅,在此只列举了一部分关键代码。
QT初始化数据表代码:1000万条记录
几个有关的常量。
QT高性能表格控件性能测试程序用到的常数
QT高性能表格控件性能测试程序
数据库初始化代码:
QT高性能表格控件性能测试程序
QT高性能表格控件性能测试程序
QT高性能表格控件性能测试程序
QT高性能表格控件性能测试程序
QT主界面代码
以下是主窗口也就是QT表格控件所在窗口的构造函数。
QT高性能表格控件性能测试程序
QT高性能表格控件性能测试程序
QT高性能表格控件性能测试程序
QT高性能表格控件性能测试程序
QT高性能表格控件性能测试程序
QT表格控件
QT图形视图框架整体介绍
下图是QT助手API DOC中介绍的QT Model-View-Delegate(模型视图代理)框架的整体结构。
QT模型视图代理框架整体结构
图中Model就是模型,View是视图,Delegate是代理。三者之间的关系看图已经很清楚了。其中,View用于用户界面交互,包括数据展示的总体框架等;Model用于向View提供数据支持,包括查询数据和保存数据(修改和插入);Delegate用于具体展示数据和具体提供数据编辑功能的用户交互界面。
QT表格控件
QT模型视图代理框架中提供了很多视图类型,本文介绍的QT表格控件QTableView就是一种视图类型。这个类型提供了表格类型的界面常用的各种功能,包括对横向表头和纵向表头以及单元格的控制和修饰。
QT表格控件界面美化效果演示
QT表格窗口
QT还提供了另外一种视图类型:QTableWidget类型,这个类型是QTableView类型的派生类型, 在QTableView的基础上做了更多粗粒度的封装的API接口,使得QTableWidget使用起来更加人性化,也就是符合大多数软件工程师的常规思维;当然QTableWidget也屏蔽了一些QTableView的底层细节API 接口,也就是有一些QTableView的一些API在QTableWidget中被使用C++的一些基础语法进行了屏蔽。
QT数据库组件
QT数据库模块整体介绍
QT助手API DOC中介绍了QT数据库模块的整体情况。
QT数据库模块整体结构
QT数据库模块包含了用户界面层(UI Layer)、SQL接口层(SQL API Layer),和驱动程序层(Driver Layer)。
在QT应用程序中使用QT数据库模块,必须在项目文件中做如下配置。 对于CMake编译构建管理工具:
QT数据库模块CMake编译构建管理项目配置
对于qmake编译构建管理工具:
QT数据库模块qmake编译构建管理项目配置
用户界面层(UI Layer)
这里的UI可以理解成是数据库模块的普通应用开发者的API 接口;按照QT模型视图代理框架的概念体系,这个UI也可以理解成是这些类型可能会放在用户界面相关的程序代码中去用,比如在与视图有关的代码中去调用这些API。 比如QSqlQueryModel经常作为模型类型在模型视图代理框架中使用,当然也可以独立使用。
SQL接口层(SQL API Layer)
QT数据库模块使用QSqlDatabase类型提供通用的数据库的连接和SQL查询操作的API接口。
驱动程序层(Driver Layer)
QT数据库模块使用QSqlDriver类型定义了一些数据库的一些抽象的底层操作。特定数据库相关的具体实现有特定数据库对应的派生类提供。 QT 助手API DOC中描述了QT框架对特定数据库的支持情况如下图所示:
QT数据库模块驱动程序层
QT表格控件的性能何以如此之高?
查询和遍历不是同一个概念
下面是在进行SQLite数据库查询之后,对10000条记录进行逐条记录遍历的代码。
QT数据库模块查询遍历实例代码
经实测运行上述代码,遍历10000条记录耗时约30毫秒。
既然仅仅遍历10000条记录就耗时30毫秒,那么QT表格控件是如何做到只花了3毫秒就完成了数据库查询操作呢?
推测可能原因是QSqlQueryModel中并没有直接的完整遍历查询结果中的10000条记录,而是QTableView控件中只遍历了少量的数据记录。当用户拖动滚动条时,QTableView控件再根据实际需求请求QSqlQueryModel去遍历更多相应的数据记录。因此看起来就像是QT表格控件在小于1毫秒的时间之内就查询到了10000条记录,甚至100万条记录。
对预取数据的支持
本文作者经过调试QT源代码后发现了如下源代码:
QT模型视图代理框架对数据预取的支持
这里定义了QAbstractItemView类型的数据记录的预取功能。每次当表格控件QTableView的界面发生变化时,就可能触发数据记录预取函数prefetch()的调用执行,这个函数每次预取255条数据记录。也就是说尽管执行SQL语句时从SQLite数据库中查询到了10000条记录,甚至100万条记录,但是QTableView每次只从查询结果中取出255条记录。这样搞当然极大的提升了包括QTableView在内的所有基于QAbstractItemView类型的视图控件的性能。
还有更多数据记录吗?
现在已经知道了QAbstractItemView每次只遍历255条数据记录,而QSqlQueryModel中的查询结果记录集中可能有10000条数据记录,甚至100万条数据记录。因此模型自己必须知道查询结果记录集中是否还有更多数据记录可以提供给QAbstractItemView视图,当然实际上是提供给这个类型的派生类QTableView之类的视图。
模型类的祖宗类QAbstractItemModel设计了两个跟数据预取有关的虚函数。
QT模型视图代理框架中模型类与数据预取有关的虚函数
当然,包括QSqlQueryModel在内的各种具体模型类都实现了这两个虚函数,以此成为一个支持数据预取(prefetch)的模型类。canFetchMore()的作用是判断是否还能获取到更多的数据记录,如果是则返回TRUE否则返回FALSE。fetchMore()的作用是具体获取到更多的数据。
在这次调试实测过程中,创建了一个QSqlQueryModel的派生类ButianyunSqlQueryModel,用于观测何时调用这两个数据预取函数。
ButianyunSqlQueryModel实现了数据预取虚函数
下面是调试过程中看到的函数调用栈。
QT模型视图代理框架中对数据预取函数的调用栈
至此对与本文主题相关的表格控件的调试分析工作已经完成。
总结
本文先通过一个具体应用实例(QT高性能表格控件分页展示百万行数据)展示了从1000万条SQLite数据记录中查询10000条记录并快速显示在QT表格控件的实际运行效果,同时给出了这个实例的一些源代码。然后介绍了QT表格控件QTableView和QT数据库组件的一些类型。后面又通过QT源码调试分析了为什么QT表格控件的性能如此之高的底层逻辑。
推荐QT性能优化技术博客专栏: QT性能优化
如果您认为这篇文章对您有所帮助,请您一定立即点赞+喜欢+收藏,本文作者将能从您的点赞+喜欢+收藏中获取到创作新的好文章的动力。如果您认为作者写的文章还有一些参考价值,您也可以关注这篇文章的作者。
关键词:
-
-
-
山东布谷科技直播系统源码热点分析:不同芯片实现高质量编码与渲染视频的GPU加速功能
importcv2 GPU加速功能部署参考代码video=cv2 VideoCapture( & 039;input mp
来源: -
【QT性能优化】QT性能优化之QT6框架高性能模型视图代理框架千万级数据表分页查询优化
如何在风控引擎中快速增加策略
山东布谷科技直播系统源码热点分析:不同芯片实现高质量编码与渲染视频的GPU加速功能
软件文档大全
男子嘉陵江非法捕捞渔获物20余斤 被依法采取强制措施
证监会出手!剑指系统离职人员
受强台风“卡努”影响 日本九州等地将出现暴风巨浪
载有3000辆汽车的滚轮船起火 劳斯莱斯:我们有车在上面
P40/Mate 30率先用上!华为系统云翻新正式上线
大连理工回应挖姜男孩被录取:将全程帮扶 请大家放心
长白山人参母公司 鲜人参10支39.9元大促(减60元)
2023年河北省科普讲解大赛决赛举行
人民子弟兵连续30多小时接续奋战抢通救援通路 转移受困群众
说谎真会“遭报应”吗?研究表明:是真的!
抓住夏天的尾巴!保罗阿斯登冰丝长裤/短裤大促:券后仅39.9元
豪华SUV领克08预售 魅族20 PRO领克时间系列联名款手机正式亮相
深圳福田长途客运站(深圳福田长途汽车站)
国产3A大作!《黑神话:悟空》线下试玩报名结束:资格千万别出售
不叫问界叫智界?消息称华为奇瑞合作品牌曝光:首车搭载鸿蒙4.0
AMD 12年老将Robert Hallock加盟Intel:职位更高级
哈佛教授称可能发现外星人存在证据:不明物体或残留地外科技
女娲补天之后去哪了?协助孙悟空修炼金刚不坏之躯,还帮了观音
构建虚拟与现实的桥梁:数字孪生技术在建筑领域的应用
炼油厂运营商遭黑客入侵,全球范围内大规模宕机
NineData|如何快速完成MySQL数据的差异对比?
linux进阶:内核模块
MySQL 索引结构浅析
国产电动仿赛车发布:29999元起 2.6秒破百
双台风又来了!今年第7号台风“兰恩”已生成:预计会直冲日本
OpenAI推出网络爬虫机器人GPTBot:收集数据改进AI模型
西数SN580固态硬盘今晚首发:4150MB/s 2TB到手799元
想买5系的等等!宝马525Li、530Li或将停产 全新5系马上就来
本田大法还香吗?新款冠道上市:23.98万起动力遭“砍一刀”
海南开展二手房“带押过户”住房公积金贷款业务
vector | push_back()的时间复杂度
贵州省公安厅交通管理局原党委书记、局长施长征接受纪律审查和监察调查
理想L8强力对手 比亚迪腾势N8本月交付:31.98万元起 一台车能当三台车用
Win垄断85%份额 操作系统采购标准公布:涉及兼容、安全等8大指标
99%除醛!小米米家空气净化器4 Pro H首销:1999元的全能旗舰
Win11新版文件管理器性能糟糕:7代i5启动将近半分钟
尼斯湖水怪要“现身”了:官方开展水怪搜索行动 要查明真相
民营物流企业50强发布 深圳5家企业上榜
沪上近12万青少年燃动一“夏” “奔跑吧·少年”儿童青少年主题健身活动开展
放十年电力满满!南孚传应石墨烯纽扣电池大促:5粒不到8元
国家网信办就人脸识别技术应用征求意见:使用人脸必须征求同意
遥遥领先蓝牙 华为星闪技术已获得耳机订单?苹果代工厂歌尔回应
苹果亲民版Vision Pro细节出炉:内嵌iPhone充当屏幕
国内首款大尺寸仿鸵双足机器人“大圣”亮相 披红色战袍
凯普生物(300639):8月8日技术指标出现观望信号-“黑三兵”
8月份以来9家公司收到监管函 三大类问题被关注
各地晒出上半年经济“成绩单” 广东、江苏上半年经济总量首次突破6万亿元
小鹏汽车严打充电桩“霸位”!超时占位每分钟1元 比特斯拉便宜
电影《孤注一掷》上映!豆瓣开分7.3:口碑两极分化
一波音747货机滑行偏出跑道!宁波机场:今日18点前航班全部取消
卢伟冰:Redmi芯片调校能力已经大幅领先同行
券商首份半年报出炉 多家上市券商业绩回暖
多家车企官宣降价 下半年车市“价格战”或再开启
华为Mate 60 Pro设计再曝:灵动岛没了 变成三打孔了!
吴京代言 中兴小鲜50开售:国产5G芯片卖699元起
嚣张!奔驰女司机顶行保安1公里被刑拘:网友点赞应严惩
今日立秋:但不意味着入秋 大部分地区继续高温
A股申购|锴威特(688693.SH)开启申购主要产品包括功率器件及功率IC两大类
DIY从入门到放弃:电源买双倍 后悔抹眼泪
济南钢铁股份有限公司:行业大佬的稳步扩张
卢伟冰打造的性能之王!Redmi K60至尊版有4大看点
男孩因为没见过大海:他报了大连理工大学
比亚迪大动作:部分新车将搭载交互式车载KTV
TFBOYS演唱会给西安带来4.16亿元旅游收入:外地人超80%
全国电影单日票房连续2天破5亿:其中《封神第一部》票房破17亿
楚雄州武定县环州乡首届野生菌开山节举办
刘松仁演过的电视剧大全 刘松仁
Go 注释
HashMap的一些常见面试问题
大暴雨!9米狂浪!台风“卡努”90度急转弯!我国这些地区,将有明显降雨!警惕……
昆明滇池大面积鱼群跳跃 网友:又要地震了?
一加做出艰难决定:选骁龙8 Gen2要额外付出上亿成本
专家:过敏多发 “元凶”就在身边
微信朋友圈大规模上线置顶功能 网友:这功能意义不大
小红书闪退,又一程序员被拉去祭天
“扣”响全民健身热潮!排球成为海南“全龄”运动
轻舟已过万重山!华为王者归来
德国MindFactory:AMD销量三倍碾压Intel!3D缓存卖疯了
集中供冷真的来了?全国多城市开始摸索 不开空调室温26℃
勇士归来!南京蓝豹救援队首批队员平安返宁
2023美国半导体产业现状:中国贡献了36%!
马斯克称赞《暗黑4》出色:暴雪干得漂亮
2599元 微星推出新款27寸显示器:4K 144Hz屏 支持DC调光
可观测性平台夜莺开源项目发布V6正式版!
江苏诈骗公众贷款案件立案标准
博主对比华为实况窗与iPhone灵动岛:还是华为良心
曝iPhone 16 Pro影像无短板了:弥补15 Pro的所有遗憾
余承东曝华为系首款纯电轿跑 Model 3劲敌要来了!
中国移动一体式卫星基站亮相:重量仅16kg 基站Wi-Fi二合一
年轻人最讨厌的表情包Top10:“死亡微笑”排第一
张志:黄金变盘窗口期临近!
【新华解读】7月末我国外汇储备规模环比增加0.35% 专家预计将保持3.2万亿美元水平
山西:加速推进制造业振兴升级
百度地图大屏版登陆比亚迪车机应用商店!北斗导航、手车互联不费电
LOL策划:国服预计今年将推进跨区匹配 已经在做测试
零容忍!暴雪开始封禁《暗黑破坏神4》恶意卡bug玩家