我正在开发一个C#WPF应用程序,它使用来自许多图像的像素数据来处理一个图像 它将每个图像存储为 System.Drawing.Bitmap 并锁定在内存中 用户可以打开任意数量的图像。
问题是,当用户打开这么多图像时,通常会发生什么,在处理过程中内存将会满了?
在我的Windows 8.1计算机上,当发生这种情况时,我在任务管理器中看到内存使用率越来越高,速度变慢,并冻结了一分钟,然后应用程序退出。
然而,在我的Windows 8.1(非RT)平板电脑上,当发生这种情况时,我在任务管理器中看到内存使用率越来越高然后突然降低然后再次升高等等2-3次。 ..(这对我来说非常奇怪,因为我认为所有图像都应保存在内存中,只在不再需要时从内存中释放),速度正常,不会冻结,并且会发生 AccessViolationException 。 / p>
所以我想知道这些行为是否正常,如果不是正常行为,为什么这对我来说不正常呢?
答案 0 :(得分:0)
C#
不适合需要大量内存的应用程序。所以我想说的就像一个建议:
验证你真的需要处理当代内存中的所有图像,或者你只需要2个,或者它们的一部分内存,当代。
如果答案是肯定的,您可以查找MemoryMapped文件。
如果答案是否定的,请重新构建您的代码。
回答你的问题:不是它不是正常行为,而是处理导致某些应用程序未定义行为的内存消耗的唯一正确方法,就是修复应用程序的体系结构。