在运行时出现"内存不足以继续执行程序"的OutofMemoryException错误。

4
我在运行时收到“内存不足以继续执行程序”的OutofMemoryException错误消息。 我在程序开始时加载图像。 每个图像大小超过50 MB。 如果图像大小超过277 MB,就会出现此异常。 我一次性加载所有图像,因为我必须在开始时显示它们的缩略图。
我正在考虑缓存和分页解决方案。 是否有可能使用系统的更多内存或其他解决方案?
谢谢
2个回答

6
有没有可能使用系统的更多内存或其他解决方案。
转换为64位是唯一的简单选择。
存在一个基础的.NET每个对象1GB限制(也适用于64位),但这不是你的问题。为了创建一个对象,.NET需要在进程中有足够的连续空闲内存。一旦您在进程中拥有几个非常大(> 250MB)的大对象,足够的连续地址空间可用性将越来越小。
选项:
- 使用多个进程和进程间通信 - 带来所有额外的复杂性(特别是在故障情况下)。 - 只加载一个图像。 - 64位。
还可以阅读“Windows Internals”关于Windows如何管理内存,然后是.NET GC如何管理后台内存。当您在推动如此多的数据时,了解正在发生的事情将没有替代品。(像VMMap这样的工具会有所帮助,但只有在您对其所有操作的核心理解的情况下才能发挥作用。)

4
您可以尝试允许程序访问更多的内存,但这可能会很困难。对于.NET应用程序,内存量由machine.config文件中的processModel/memoryLimit设置控制。微软建议将其设置不超过60%。
然而,您一次性加载50MB以上的图像以显示缩略图(这些缩略图可能非常小)。我建议您在这里进行更改。您可以逐个加载图像,然后立即生成缩略图并释放内存。
无论如何,在尝试显示缩略图时使用50MB以上的图像是不高效的。您不能只保存缩略图,而无需每次都生成它们吗?

谢谢,Hugo。这是个好主意。 - Saghar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接