如何避免和预测内存异常

时间:2011-10-24 14:38:43

标签: c# performance algorithm memory

所以,如果我有一个List<Bitmap> myBitmaps,我应该从DataBase中存储很多Bitmaps令牌,并且它可能是内存异常,我怎么能避免这种情况。

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

另一种情况是,如果我加载一个Base64并编码为String和String到Base64对大量数据如何实现它而不会导致Out of Memory异常,我怎么能预测是否会有一个Out of两种情况都有内存异常。

PS:如果有人提供解决方案,请解释它是否会降低性能和原因。

3 个答案:

答案 0 :(得分:1)

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

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

您缓存的具体内容将再次取决于使用模式。请考虑使用WeakReference

大数据的Base64转换可以简单地转换为online algorithm,一次转换少量数据。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

如果执行这样的大量SQL查询会对您产生影响,请加载并处理N个串联中的位图(其中N取决于您的具体情况)。没有必要将它们保存到磁盘,这就是数据库的用途。