所以,如果我有一个List<Bitmap> myBitmaps
,我应该从DataBase中存储很多Bitmaps令牌,并且它可能是内存异常,我怎么能避免这种情况。
我应该在硬盘上存储一堆图像,而不是在第一次处理后加载另一个图像。
另一种情况是,如果我加载一个Base64并编码为String和String到Base64对大量数据如何实现它而不会导致Out of Memory异常,我怎么能预测是否会有一个Out of两种情况都有内存异常。
PS:如果有人提供解决方案,请解释它是否会降低性能和原因。
答案 0 :(得分:1)
从它的声音来看,似乎Bitmaps
很大,将它们全部存储在内存中是不切实际的。如果你正在对它进行批量操作,那么交换到磁盘肯定会导致性能下降,但鉴于在现实世界中你正在使用硬件限制,没有选择。
您可以在内存中缓存有关位图的某些元数据以加速操作。另一种选择是将整个位图缓存在内存中,并在核心内存中没有数据时转到磁盘。
您缓存的具体内容将再次取决于使用模式。请考虑使用WeakReference
。
大数据的Base64转换可以简单地转换为online algorithm,一次转换少量数据。
答案 1 :(得分:0)
我更希望在数据库中存储这样的(可能的)大量数据。数据库的性能取决于数据库,硬件和与数据库的连接。
答案 2 :(得分:0)
如果位图太大,你可以逐个加载它们。每次只加载一个位图,处理它,不要忘记Dispose()
它,然后继续另一个位图。
如果执行这样的大量SQL查询会对您产生影响,请加载并处理N个串联中的位图(其中N取决于您的具体情况)。没有必要将它们保存到磁盘,这就是数据库的用途。