参考:

(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万行数据)相关推荐

  1. Pycharm打开(打印)大数据文件显示不全的解决方法

    Pycharm打开(打印)大数据文件显示不全,即控制台显示不完那么多行. 解决方法如下: -------------追加以下字段 idea.max.intellisense.filesize = 20 ...

  2. js创建10万行表格 页面显示10万行数据

    js创建10万行表格 页面显示10万行数据 <html> <head></head> <style> table {     border-collap ...

  3. Java实验9 T3.对二进制数据文件中的所有数据求和

    题目要求 (对二进制数据文件中的所有数据求和)假设已经使用DataOutputStream中的writeInt(int)创建一个名为Exercise 19_3.dat的二进制数据文件,文件包含数目不确 ...

  4. LabVIEW将现有数据文件映射至TDMS数据文件格式

    LabVIEW将现有数据文件映射至TDMS数据文件格式 在某些情况下,可能无法使用TDMS文件格式,例如客户或供应商指定必须使用某种格式存储数据.有些传统仪器可能会自动使用某种自定义格式提供数据输出文 ...

  5. 查找另一台计算机,查找 Outlook 数据文件,将 Outlook 数据文件从一台计算机转移到另一台计算机...

    对 Office 2010 的支持于 2020 年 10 月 13 日结束 升级到 Microsoft 365 以在任何设备上随时随地工作,并继续获得支持.立即升级 注意: 您的配置可能不包含所有这些 ...

  6. mysql 数据文件压缩,压缩MySQL数据文件的妙招

    MySQL数据文件如果过大,能否进行压缩呢?答案是肯定的.下面就教您一个压缩MySQL数据文件的方法,希望对您能有所帮助. MySQL使用一段时间后,MySQL数据文件ibdata会增长得很大(主要是 ...

  7. oracle undo数据文件坏,oracle undo数据文件损坏故障处理案例

    oracleundo数据文件损坏故障处理案例 大家都知道Oracle的数据都存储在数据文件中,undo表空间存储的数据是某些变更操作的前镜像以及一致性读数据,而且undo表空间是循环利用的,一段时间后 ...

  8. c语言数据文件是,C语言数据文件操作.ppt

    C语言数据文件操作 第十一章 文件 11.1 C文件概述 文件:存储在外部介质上数据的集合,是操作系统数据管理的单位 文件处理方法 缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区 ...

  9. oracle11g数据文件路径,oracle11g修改数据文件路径

    有时候我们想把数据文件移动到其他的目录下,可以按照如下操作: 查看数据文件位置 SQL>  select file_name from sys.dba_data_files; FILE_NAME ...

最新文章

  1. win32 debug api 原理
  2. python代码图片头像_Python帮你微信头像任意添加装饰别再@微信官方了
  3. 桶排序 Bin Sort
  4. pdo_mysql 必须 ×未安装_php pdo_mysql未安装问题解决方法_PHP教程 | 蒲公英网
  5. IBASE and ES change pointer
  6. Effective C++学习第六天
  7. oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)
  8. dmv io读写高的sql_使用内置的动态管理视图(DMV)发现更多SQL Server信息
  9. 农业智慧物联卡火爆发展中存在的问题
  10. jdk TreeMap源码解析
  11. 生成一定范围内的互不相同的随机数的方法比较
  12. i2c-tools使用及调试
  13. 迅为IMX6ULL开发板Linux RS232/485驱动实验(上)
  14. 深入学习HTTP协议
  15. 高德地图 定位失败,10: 定位服务启动失败 解决办法
  16. weixin-java-pay实现APP微信支付与退款
  17. 巨头侵蚀下,社交电商的“蜂群”当如何生存?
  18. Redis之Redis基础、环境搭建、主从切换
  19. LM在speech recognition中的应用
  20. 如何下载Java JDK老版本 JDK8

热门文章

  1. 【面试 - 八股文】Linux 高频面试题,助你吊打面试官系列
  2. 手机WIFI拦截器简单实现
  3. ALLHIC使用 | HiC辅助基因组组装(三)
  4. vue3 前端pc生成微信支付二维码
  5. 支付宝花呗额度一直不涨?阿里老员工说出原因,亲测有效
  6. 决策树之C4.5实现(离散属性与连续,属性并存)
  7. 细数中国历史上的十大乱世枭雄(上)
  8. 区块链龙头股都有哪些?区块链概念股有哪些?
  9. 2022危险化学品生产单位主要负责人考试题库及模拟考试
  10. 移动开发之设计模式- 中介者模式(IOSAndroid)