2010-08-05 157 views
1

我在运行时收到OutofMemoryException,并显示消息“内存不足以继续执行程序”。我在程序开始时加载图像。每个图像是50 + MB。如果图像大小增加到277 MB,那么我得到这个异常。我一次加载图像,因为我必须在开始时显示缩略图。在运行时收到OutofMemoryException,并显示消息“内存不足,无法继续执行程序”

我在考虑缓存和分页解决方案。我有任何可能使用更多的系统内存或其他解决方案。

谢谢

回答

1

你或许可以尝试让你的程序访问更多的内存,但这将是一个挣扎。对于.NET应用程序,内存量由machine.config文件中的processModel/memoryLimit设置控制。 Microsoft建议您将其设置为不高于60%。

但是,您一次加载50多个MB图像,以显示缩略图(可能很小)。我建议这是你进行改变的地方。您可以逐个加载图像,然后生成缩略图并立即释放内存。

在任何情况下,当您尝试显示缩略图时,有50 MB +图像效率不高。你不能只保存缩略图,不必每次都生成缩略图吗?

+0

感谢雨果。这是个好主意。 – Saghar 2010-08-06 13:24:47

3

是否有任何可能使用更多的系统内存或其他解决方案。

切换到64位是唯一的简单选项。

每个对象有1GB的底层.NET限制(也适用于64位),但这不是你的问题。要创建一个对象,.NET需要有足够的连续空闲内存。一旦处理了几个非常大的(> 250MB)大型对象,就不可能有足够的连续地址空间可用。

选项:

  • 使用多个进程和进程间通信&mhash;所有带来(尤其是在发生故障的情况下)的额外复杂性。
  • 一次只能载入一张图片。
  • 64bit。

此外,还有关于Windows如何管理内存的“Windows内部函数”的介绍,以及.NET GC如何管理内存以供后台使用。当你推动如此多的数据时,无法知道发生了什么。 (像VMMap这样的工具将会对你有所帮助,但前提是你有核心的理解它是如何工作的。)

相关问题