QTableWidget大数据文件显示(1000万行数据)
参考:
(1条消息) c/c++ qt如何快速的解析(300MB-1G)大文件_江南又旧雨的博客-CSDN博客
上文记录了QTextEdit显示1000万行的数据的开发过程,对于QTableWidget显示大数据文件可以作为参考。
QTableWidge显示大数据文件有以下几点需要注意:
(1)读取大数据文件,采用下面代码是非常慢的,仅仅是读文件就需要花费30s左右:
QFile file(path);if (!file.open(QIODevice::ReadOnly | QIODevice::Text))return;unsigned long count = 0;while (!file.atEnd()) {QByteArray line = file.readLine();count++;m_strList.append(line);}
file.close();
推荐使用:fgets(buf, BUFSIZE, ifp)或者fread(),读取文件,速度比较快。
如果不需要读取所有的文件内容,可以先建立文件映射,建立映射后用mmap直接从硬盘上读取需要的行数据,此种方式读取读取效率高,占用内存小,对文件的分页显示很有用处。对于文件映射,1G左右的文件,大概在1.2s左右可以完成文件映射,速度还是很快的。
(2)QTableWidge添加大量数据,每添加一行数据耗时0.5ms,一次全部添加完20万行,大概需要100秒左右,是非常耗时间的。更何况于1000万行数据,一下子全部加载,还会消耗很大的内存,软件可能会直接死机。
综上所述,对于QTableWidge显示大数据文件,有如下几点思路:
(1)动态文件加载,开启一个线程读文件,这样就不会因为读取文件时间长导致界面卡死;在QTableWidge采用分页显示,每次交互只加载需要在屏幕上显示的那些行数据,表格固定的是一百行,每次操作对这一百行数据进行刷新,虚拟出完整表格的效果。
测试:QTableWidge动态加载,显示1千万行数据,此种方法可以快速的显示界面,但是读取文件速度较慢,文件占用内存很大。
源码:
(1条消息) QTableWidge动态加载,显示1千万行数据,开启一个线程读文件,这样就不会因为读取文件时间长导致界面卡死资源-CSDN文库
(2)先去读全部的,再进行分页显示,只在表格需要在屏幕上显示的那些行填充数据,不显示的不填充数据,表格行数是数据的行数。
测试:QTableWidge分页显示1千万行数据,此种方法优化了文件的读取,可以快速的读取全部的文件内容,大概1.5s读取完1千万行,但是1千万行表格占用较大的内存,滑动条滑动会微卡。
源码:
(1条消息) QTableWidget只在表格需要在屏幕上显示的那些行填充数据,不显示的不填充数据,表格行数是数据的行数资源-CSDN文库
(3)先去读全部的,再进行分页显示,表格固定的是一百行,每次操作对这一百行数据进行刷新,虚拟出完整表格的效果。
测试:QTableWidge分页显示1千万行数据,此种方法优化了文件的读取,可以快速的读取全部的文件内容,表格也只100行,占用内存较小。但是读取了全部大文件,文件占用的较大部分的内存。
源码:
(2条消息) QTableWidget先去读全部的,再进行分页显示,表格固定的是一百行,每次操作对这一百行数据进行刷新,虚拟出完整表格的效果-C++文档类资源-CSDN文库
(4)文件映射
如果文件很大,读取全部的数据会占用很大内存,推荐文件映射的方法,每次交互只读需要显示的文件数据。文件映射放置放置在主线程中,1G左右的文件,大概在1.2s左右可以完成文件映射;再进行分页显示,表格固定的是一百行,每次操作对这一百行数据进行刷新,虚拟出完整表格的效果。
测试:QTableWidge分页显示1千万行数据,建立mmap文件映射,只读取需要显示的部分文件内容,此种方式速度快,占用内存小,内存占用149MB左右,每次只读取显示部分的数据,推荐此种方式。
源码:
(2条消息) QTableWidget大数据文件文件映射mmap-C++文档类资源-CSDN文库
QTableWidget大数据文件显示(1000万行数据)相关推荐
- Pycharm打开(打印)大数据文件显示不全的解决方法
Pycharm打开(打印)大数据文件显示不全,即控制台显示不完那么多行. 解决方法如下: -------------追加以下字段 idea.max.intellisense.filesize = 20 ...
- js创建10万行表格 页面显示10万行数据
js创建10万行表格 页面显示10万行数据 <html> <head></head> <style> table { border-collap ...
- Java实验9 T3.对二进制数据文件中的所有数据求和
题目要求 (对二进制数据文件中的所有数据求和)假设已经使用DataOutputStream中的writeInt(int)创建一个名为Exercise 19_3.dat的二进制数据文件,文件包含数目不确 ...
- LabVIEW将现有数据文件映射至TDMS数据文件格式
LabVIEW将现有数据文件映射至TDMS数据文件格式 在某些情况下,可能无法使用TDMS文件格式,例如客户或供应商指定必须使用某种格式存储数据.有些传统仪器可能会自动使用某种自定义格式提供数据输出文 ...
- 查找另一台计算机,查找 Outlook 数据文件,将 Outlook 数据文件从一台计算机转移到另一台计算机...
对 Office 2010 的支持于 2020 年 10 月 13 日结束 升级到 Microsoft 365 以在任何设备上随时随地工作,并继续获得支持.立即升级 注意: 您的配置可能不包含所有这些 ...
- mysql 数据文件压缩,压缩MySQL数据文件的妙招
MySQL数据文件如果过大,能否进行压缩呢?答案是肯定的.下面就教您一个压缩MySQL数据文件的方法,希望对您能有所帮助. MySQL使用一段时间后,MySQL数据文件ibdata会增长得很大(主要是 ...
- oracle undo数据文件坏,oracle undo数据文件损坏故障处理案例
oracleundo数据文件损坏故障处理案例 大家都知道Oracle的数据都存储在数据文件中,undo表空间存储的数据是某些变更操作的前镜像以及一致性读数据,而且undo表空间是循环利用的,一段时间后 ...
- c语言数据文件是,C语言数据文件操作.ppt
C语言数据文件操作 第十一章 文件 11.1 C文件概述 文件:存储在外部介质上数据的集合,是操作系统数据管理的单位 文件处理方法 缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区 ...
- oracle11g数据文件路径,oracle11g修改数据文件路径
有时候我们想把数据文件移动到其他的目录下,可以按照如下操作: 查看数据文件位置 SQL> select file_name from sys.dba_data_files; FILE_NAME ...
最新文章
- win32 debug api 原理
- python代码图片头像_Python帮你微信头像任意添加装饰别再@微信官方了
- 桶排序 Bin Sort
- pdo_mysql 必须 ×未安装_php pdo_mysql未安装问题解决方法_PHP教程 | 蒲公英网
- IBASE and ES change pointer
- Effective C++学习第六天
- oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)
- dmv io读写高的sql_使用内置的动态管理视图(DMV)发现更多SQL Server信息
- 农业智慧物联卡火爆发展中存在的问题
- jdk TreeMap源码解析
- 生成一定范围内的互不相同的随机数的方法比较
- i2c-tools使用及调试
- 迅为IMX6ULL开发板Linux RS232/485驱动实验(上)
- 深入学习HTTP协议
- 高德地图 定位失败,10: 定位服务启动失败 解决办法
- weixin-java-pay实现APP微信支付与退款
- 巨头侵蚀下,社交电商的“蜂群”当如何生存?
- Redis之Redis基础、环境搭建、主从切换
- LM在speech recognition中的应用
- 如何下载Java JDK老版本 JDK8