当内存将满时会发生什么

本文关键字:什么 满时会 内存 | 更新日期: 2023-09-27 18:00:20

我正在开发一个C#WPF应用程序,该应用程序使用来自多个图像的像素数据来处理一个图像
它将每个图像存储为System.Drawing.Bitmap并锁定到内存中
用户可以打开任意数量的图像。

问题是,当用户打开这么多图像,以至于在处理过程中内存会满时,通常会发生什么?

在我的Windows 8.1计算机上,当这种情况发生时,我在任务管理器中看到内存使用率越来越高,速度减慢,冻结一分钟,然后应用程序退出。

然而,在我的Windows 8.1(非RT)平板电脑上,当这种情况发生时,我在任务管理器中看到内存使用率越来越高,然后突然变低,然后又变高,以此类推2-3次。。。(这对我来说很奇怪,因为我认为所有图像都应该保存在内存中,只有在不再需要时才从内存中释放),速度正常,没有冻结,并且发生AccessViolationException

所以我想知道这些行为是否正常,如果不正常,什么是正常行为,为什么对我来说不正常?

当内存将满时会发生什么

C#对于内存不足的应用程序来说不是一种好语言。就像一个建议,我会说:

  • 验证你真的需要记忆中的所有当代图像来处理,还是你只需要2个,或者其中的一部分,当代图像。

  • 如果答案是肯定的,您可以查找MemoryMapped文件。

  • 如果答案是否定的,请重新编排代码。

回答你的问题:不,这不是一种正常的行为,处理导致一些应用程序未定义行为的内存消耗的唯一正确方法是修复应用程序的体系结构。