程序编译正常,运行时程序读取100W+数据过程中崩溃

十秒耿直拆包选手 2021-02-22 09:56:53
RT,程序读取110W+的数据,使用model-view进行数据显示,我的主机是64位win7,内存8G,在读到60~80W数据时程序crash,下面截图是崩溃时内存占用情况。

标红是运行的程序,
不知道是不是内存占用过大造成的?
...全文
513 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 6 楼 much0726的回复:
是不是抛出线程太多了,WIN系统子线程上限在200-300左右
不是的,我只创建了一个子线程。应该是模型放到子线程的原因,具体为啥不能放还在找
much0726 2021-03-04
  • 打赏
  • 举报
回复
是不是抛出线程太多了,WIN系统子线程上限在200-300左右
  • 打赏
  • 举报
回复
引用 4 楼 十秒耿直拆包选手 的回复:
统一回复:目前打开大数据问题已经解决,用260W数据测试正常。我觉得应该是我两个地方的处理代码有问题造成的,目前先改的没问题,具体原因再测试。
1)我将从文件读取数据的类迁移到子线程中,但是在析构函数中处理有问题,参考Qt手册中的处理方式,又因为将读取文件类是在用户点击按钮后才迁移到子线程中,为避免指针泄露,我添加了读取文件类线程对比, 如果在主线程中手动删除。具体代码如下:
File_processing::~File_processing()
{
data_division_thread_.quit();
data_division_thread_.wait();

data_read_thread_.quit();
data_read_thread_.wait();

// 当division_process_和File_processing在同一个线程中,说明division_process_没有迁移到子线程,
// 需要手动释放division_process_消耗的资源
if (thread() == division_process_->thread()) {
delete division_process_;
division_process_ = nullptr;
}

// 原因同division_process_
if (thread() == read_process_->thread()) {
delete read_process_;
read_process_ = nullptr;
}
}


2) 将模型在主线程中处理,不再放到子线程中处理。我觉得这个可能是真正造成的问题,后续再测试了。


经过代码测试应该是模型迁移到子线程造成的。
熊猫呀 2021-02-25
  • 打赏
  • 举报
回复
64位程序 内存肯定够的。是不是Qt 控件 撑不住了,debug 调试下。
  • 打赏
  • 举报
回复
统一回复:目前打开大数据问题已经解决,用260W数据测试正常。我觉得应该是我两个地方的处理代码有问题造成的,目前先改的没问题,具体原因再测试。
1)我将从文件读取数据的类迁移到子线程中,但是在析构函数中处理有问题,参考Qt手册中的处理方式,又因为将读取文件类是在用户点击按钮后才迁移到子线程中,为避免指针泄露,我添加了读取文件类线程对比, 如果在主线程中手动删除。具体代码如下:
File_processing::~File_processing()
{
data_division_thread_.quit();
data_division_thread_.wait();

data_read_thread_.quit();
data_read_thread_.wait();

// 当division_process_和File_processing在同一个线程中,说明division_process_没有迁移到子线程,
// 需要手动释放division_process_消耗的资源
if (thread() == division_process_->thread()) {
delete division_process_;
division_process_ = nullptr;
}

// 原因同division_process_
if (thread() == read_process_->thread()) {
delete read_process_;
read_process_ = nullptr;
}
}


2) 将模型在主线程中处理,不再放到子线程中处理。我觉得这个可能是真正造成的问题,后续再测试了。
  • 打赏
  • 举报
回复
引用 2 楼 donwmufromdying 的回复:
看看崩溃的调用栈,看看具体的错误是什么
能给说下具体怎么看调用栈么??:)
donwmufromdying 2021-02-25
  • 打赏
  • 举报
回复
看看崩溃的调用栈,看看具体的错误是什么

21,437

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧