保存/使用图像而不分配300mb内存

时间:2012-09-10 11:06:18

标签: c# .net visual-studio-2010 image memory

我正在.net 4.0 c#中构建一个Windows项目。

我现在正在将图像保存到硬盘驱动器,并且根本不占用任何内存,因为我只想在查看它时加载图像。但现在我需要删除硬盘中的图像创建并以其他方式创建它。就像创建内存流并将其保存到对象并将其序列化为硬盘驱动器一样。重要的是,我不能在硬盘中看到图像,它们必须加密或在对象或其他东西。

所以....当我试图将它放入内存流并将其保存到列表然后将其序列化为驱动器时,我得到了一个巨大的程序内存分配,因为对于我创建的每个图像,并保存为内存在我的列表中流,我分配内存,我的程序超过2-300 MB大。

我真的不知道如何做到这一点,我可以以某种方式将其保存到内存流而不在程序中分配内存吗?或者可以通过其他方式保存它而不会让图片在硬盘中完全可见?

主要的是正如我所说,我不能将图像作为硬盘上的常规图像,如果没有应用程序,用户就无法查看它们。我需要找到一种不分配所有计算机内存的方法。

提前谢谢!

3 个答案:

答案 0 :(得分:1)

  

将其保存到内存流中,而不是在程序中分配该内存

没有。如果它在内存流中,它显然在RAM中。

因此,您需要将图像完全存储在RAM中,或将其保存到磁盘。

如果您不希望它在磁盘上可见,那么您需要加密该文件,以便用户无法在您的应用程序之外查看它。加密的重要程度取决于您希望破解的难度。如果您不在乎那么多,那么非常基本的XOR加密将非常快并且不会增加文件的大小。如果你关心,那么你想使用像3DES这样的东西。

答案 1 :(得分:0)

文件访问是基于 streams 的原则构建的,它可以在一个链中插入。您可以做的是,不是通过文件流直接从/向磁盘读取/写入图像,而是在它之间插入CryptoStream

答案 2 :(得分:0)

您可以使用GZIPStream和CryptoStream使图片更小和加密。

本文将向您展示如何;

http://www.liensberger.it/web/blog/?p=33