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...

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

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

const int PAGE_SIZE = 100; // 每页加载的图像数量
QList<ImageInfo> m_imgInfoList; // 原始图像列表
QList<ImageInfo> m_loadedImages; // 已加载的图像列表

int startIndex = 0;
int endIndex = PAGE_SIZE - 1;

// 加载初始页
for (int i = startIndex; i <= endIndex && i < m_imgInfoList.size(); ++i) {
    const ImageInfo& image = m_imgInfoList[i];
    // 处理需要的图像信息
    m_loadedImages.append(image);
}

// 滑动窗口逻辑,根据需要不断滑动加载新数据
while (endIndex < m_imgInfoList.size()) {
    // 需要新一页数据时,释放旧页并加载新页

    for (int i = startIndex; i < startIndex + PAGE_SIZE && i < m_imgInfoList.size(); ++i) {
        const ImageInfo& image = m_imgInfoList[i];
        // 处理需要的图像信息
        m_loadedImages.append(image);
    }

    // 释放旧页的图像数据
    for (int i = 0; i < startIndex && !m_loadedImages.isEmpty(); ++i) {
        // 处理要释放的图像数据,可以根据需要进行资源释放操作
        m_loadedImages.takeFirst();
    }

    // 更新窗口位置
    startIndex += PAGE_SIZE;
    endIndex += PAGE_SIZE;
}

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?