c# - 在单个应用程序实例中加载大量位图时 WPF 内存不足异常。有限制吗?

标签 c# wpf image memory

我需要将大量位图加载到内存中以在 WPF 应用程序中显示(使用 .net 4.0)。我遇到麻烦的地方是当我接近 1,400MB 的内存时(我是从任务管理器的进程列表中获取的)。

无论应用程序是在内存为 4GB 还是 6GB 的机器上运行(以及其他一些我没有详细信息的配置),都会发生同样的事情。通过减少加载的图像很容易测试,当它在一台机器上运行时,它可以在所有机器上运行,但是当它在一台机器上崩溃时,它也可以在所有机器上运行。

当我减少图像数量并允许应用程序加载而不会导致内存异常时,我可以运行应用程序的多个实例(超过单个实例的 1.4GB)而不会出现问题,因此它似乎是每个实例的限制或我的每个实例错误。

我将图像加载为 BitmapImage,它们要么存储在 List<BitmapImage> 中或加载到 List<byte[]>它们后来在一堆分层序列中使用(使用 Writeablebitmap )

当我加载图像而不是在使用时发生错误。在可重复的情况下,我加载了 600 张 640X640 图像以及另外 200-300 张从 100X100 到 200X200 的较小图像,尽管这似乎是一个整体位数的问题。

所以我的问题是:

*在这种情况下是否有一些内置的每个进程内存限制?

*有没有更好的技术将大量图像数据加载到内存中?

谢谢, 布赖恩

最佳答案

是的,每个进程的内存分配有限制。解决方案之一是让您的二进制 LARGEADDRESSAWARE 占用更多内存。

请参阅 Out of memory? Easy ways to increase the memory available to your program ,它围绕解决方案进行了很好的讨论。

关于c# - 在单个应用程序实例中加载大量位图时 WPF 内存不足异常。有限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3911568/

相关文章:

c# - 使用 ObjectAnimationUsingKeyFrames 切换可见性

c# - 带有自定义 TaskScheduler 的 Parallel.ForEach 以防止 OutOfMemoryException

c# - 将代码移至 viewModel 类绑定(bind)

wpf - 保存 WPF StackPanel 子项

css - 在 Bootstrap 中将图像放在另一个图像上

java - 将图像添加到 JTable

c++ - 使用 C++ 的 Sobel 边缘检测器,无需任何特殊库或工具

c# - Visual Studio 2015- "Unable to step. The operation could not be completed. A retry should be performed"

c# - 执行时自动插入ID

c# - 如何获取当前 ItemsControl 项的索引?