设为首页 加入收藏

TOP

【QT性能优化】QT性能优化之QT6框架高性能模型视图代理框架千万级数据表分页查询优化(一)
2023-08-26 21:10:34 】 浏览:140
Tags:能优化 QT6 高性能 千万 查询优

QT性能优化之QT6框架高性能模型视图代理框架千万级数据表分页查询优化

简介

本文介绍了QT模型视图代理框架中的QT表格控件和QT数据库模块中的QT数据库查询模型结合使用的一个应用实践案例:QT高性能表格控件分页展示千万行数据。本文介绍了这个应用实践案例的运行效果和源代码。这个应用实践案例实测运行表明,QT表格控件具备在3毫秒之内快速从1000万数据记录的SQLite数据库的一个数据表中查询读取10000记录的能力。 本文还介绍了QT表格控件和QT数据库模块的一些总体情况。本文最后通过QT框架的源代码调试运行分析了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数据库模块查询遍历实例代码
在这里插入图片描述

经实测运行上述代码,遍历1000

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇c++ 存储区 下一篇4.2 C++ Boost 内存池管理库

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目