如何避免和预测内存不足异常

本文关键字:内存不足 异常 何避免 | 更新日期: 2023-09-27 18:12:07

所以,如果我有一个List<Bitmap> myBitmaps,我应该从数据库中存储很多位图令牌,它可能是内存不足的异常,我怎么能避免这种情况。

我应该在硬盘上存储一堆图像,而不是在第一堆处理后加载另一堆图像吗?

另一种情况是,如果我加载一个Base64并对大量数据编码为String和String到Base64,我如何才能在不引起内存不足异常的情况下实现它,以及我如何预测在这两种情况下是否会出现内存不足异常。

PS:如果有人提供了一个解决方案,请解释它是否会减慢性能和原因。

如何避免和预测内存不足异常

听起来,Bitmaps似乎很大,将它们全部存储在内存中是不切实际的。如果您正在对它进行批量操作,那么交换到磁盘肯定会导致性能下降,但考虑到在现实世界中您正在使用硬件限制,因此没有选择。

您可能能够在内存中缓存有关位图的某些元数据以加速操作。另一种选择是在内存中缓存整个位图,当核心内存中的数据不可用时转到磁盘。

究竟缓存哪一个将再次取决于使用模式。考虑使用WeakReference

Base64转换对于大数据可以简单地转换为在线算法,一次转换少量数据。

我更愿意将这样(可能的)大量数据存储在数据库中。数据库的性能取决于数据库、硬件和与数据库的连接。

如果位图太大,您可以逐个加载它们。每次只加载一个位图,处理它,不要忘记Dispose()它,然后再去另一个位图。

如果像这样做很多SQL查询对你来说会有不同,那么以N为组加载和处理位图(其中N取决于你的具体情况)。没有必要将它们保存到磁盘,这就是数据库的作用