gpt4 book ai didi

c++ - C++/MFC 应用程序内存不足错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:37:42 28 4
gpt4 key购买 nike

我有一个使用 VS 6 开发的旧 Doc/View C++/MFC 应用程序。我使用 Stingray Objective Grid 8.01 Pro 作为我的数据网格。

最近,我们的“工作”规模变得更大;这是内存不足错误开始出现的时候。

这是给我内存不足错误的场景:

仅供引用,当我说我在下面的场景中加载作业时;这意味着我读取一个数据库并使用将数据保存在 CArray 和 CList 对象中的自定义类将与该作业关联的数据加载到内存中;它存储在文档类中。此外,我将其中一些数据存储在该文档的主视图上的两个 StingRay 网格中。

当我第一次打开应用程序时,它在任务管理器中显示了大约 21 MB 的内存使用情况。我首先加载一个典型的作业,然后该应用程序的大小达到了 40 MB 左右。然后我加载了一个“大”作业,然后应用程序增长到大约 159 MB。接下来,我关闭“大型”作业,应用程序的大小下降到 40 MB 左右。然后我再次加载相同的“大型”作业,它又回到了 159 MB 左右。然后我打开一个包含 StingRay 网格的无模式窗口,并用作业中的数据填充网格。执行此操作后,应用程序内存使用量将跃升至 1,421 MB 左右。然后我关闭无模式窗口,它回到大约 163 MB。然后我关闭“大型”作业,它又回到了 45 MB 左右。然后我尝试重新打开相同的“大型”作业,当我开始在主窗口(不是无模式窗口)上重新加载 Stingray 网格时,出现内存不足错误。此时,应用程序在任务管理器中显示大约 170 MB。

因为我可以毫无问题地关闭和重新打开作业,所以我只能假设当我在无模式窗口中将数据加载到 Stingray 网格时;有些东西没有被释放;但如果是这样的话,为什么在我关闭无模式窗口后,任务管理器中的内存使用似乎又回到了接近正常的水平。关闭无模式窗口后,它只增加了大约 5 MB。

我真正需要的是关于如何尝试和确定为什么当我的应用程序只使用了 160 MB 时出现内存不足错误的一些建议。

如有任何帮助,我们将不胜感激。

谢谢,

菲尔

最佳答案

加载网格时获得 1,421 MB 令人不安地接近 32 位应用程序允许的 2GB 地址范围。当然,万无一失的解决方案是成为 64 位应用程序(如果可能的话)。您可以尝试的另一件事是使用网格的虚拟模式,因此网格不必复制数据。在虚拟模式下,您会收到要绘制的每一行或每个单元格的回调,并将文档存储中的数据提供给它。

关于c++ - C++/MFC 应用程序内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22538539/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com