.net - 在运行时获取 OutofMemoryException 消息 "Insufficient memory to continue the execution of the program"

标签 .net wpf exception

我在运行时收到 OutofMemoryException 消息“内存不足,无法继续执行程序。”。我在程序开始时加载图像。每张图片超过 50 MB。如果图像大小超过 277 MB,则会出现此异常。我立即加载图像,因为我必须在开始时显示它们的缩略图。

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

谢谢

最佳答案

Is there any possibility to use more memory of the system or somehow other solution.

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

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

选项:

  • 使用多进程和进程间通信——带来所有额外的复杂性(尤其是在失败情况下)。
  • 一次只加载一张图片。
  • 64 位。

另请阅读“Windows 内部原理”,了解 Windows 如何管理内存,然后阅读 .NET GC 如何管理后台内存。当您推送如此多的数据时,没有什么比知道发生了什么更重要的了。 (像 VMMap 这样的工具会有所帮助,但前提是您对它的工作原理有核心理解。)

关于.net - 在运行时获取 OutofMemoryException 消息 "Insufficient memory to continue the execution of the program",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3416416/

相关文章:

javascript - 组件返回失败代码 : 0x80040111 (NS_ERROR_NOT_AVAILABLE)

python - 在 python 中捕获 IOError

c# - 如何隐式转换反射方法调用

c# - WPF MVVM 应用程序中常量(标签文本等)应该放在何处

c# - 为类库使用系统命名空间 : good or bad

c# - 康威的生命游戏 2D 阵列未排列

.net - 为什么 Int32 是值类型?

c# - 从其子类初始化 C# Tuple<T, T> 以便在 WPF 中使用

WPF WinForms 互操作问题与启用/禁用

java - 当我输入字母 a b c 时,java 中的期望会下降