ZBLOG

struct ImageInfo{ QString camType; cv::Mat mat2D; cv::Mat mat3DIntensity; cv::Mat mat3DR; int Width3D; int Height3D; QString imgNo; std::string imgPath; std::string nativePath; bool isFinish; QString fi...

如果数据过多导致内存累加,并且不能丢失数据,可以考虑使用分页加载的方式来处理。即将大量的数据进行分批加载,只在需要的时候加载部分数据,以减少内存占用。

一种解决方案是使用滑动窗口的概念,定义一个固定大小的窗口,根据需求不断向前滑动加载新数据,并释放已经使用过的旧数据。以下是一个示例代码片段:

  1. const int PAGE_SIZE = 100; // 每页加载的图像数量
  2. QList<ImageInfo> m_imgInfoList; // 原始图像列表
  3. QList<ImageInfo> m_loadedImages; // 已加载的图像列表
  4. int startIndex = 0;
  5. int endIndex = PAGE_SIZE - 1;
  6. // 加载初始页
  7. for (int i = startIndex; i <= endIndex && i < m_imgInfoList.size(); ++i) {
  8. const ImageInfo& image = m_imgInfoList[i];
  9. // 处理需要的图像信息
  10. m_loadedImages.append(image);
  11. }
  12. // 滑动窗口逻辑,根据需要不断滑动加载新数据
  13. while (endIndex < m_imgInfoList.size()) {
  14. // 需要新一页数据时,释放旧页并加载新页
  15. for (int i = startIndex; i < startIndex + PAGE_SIZE && i < m_imgInfoList.size(); ++i) {
  16. const ImageInfo& image = m_imgInfoList[i];
  17. // 处理需要的图像信息
  18. m_loadedImages.append(image);
  19. }
  20. // 释放旧页的图像数据
  21. for (int i = 0; i < startIndex && !m_loadedImages.isEmpty(); ++i) {
  22. // 处理要释放的图像数据,可以根据需要进行资源释放操作
  23. m_loadedImages.takeFirst();
  24. }
  25. // 更新窗口位置
  26. startIndex += PAGE_SIZE;
  27. endIndex += PAGE_SIZE;
  28. }

通过使用分页加载的方式,可以限制内存占用并避免丢失数据。你可以根据实际需求和系统资源情况调整页面大小和滑动窗口逻辑。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=15677

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?