2012-09-10 43 views
0

我在.net 4.0 c#中建立一个Windows项目。保存/使用图像,而不分配300MB的内存

我现在将图像保存到硬盘驱动器,并没有采取任何内存,因为我只加载图像一旦我想查看它。但现在我需要删除硬盘驱动器中的图像创建并以其他方式创建它。就像创建一个内存流并将其保存到一个对象并将其序列化到硬盘驱动器一样。重要的一点是,我无法在硬盘中看到图像,它们必须加密或放置在物体或其他物体上。

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

我真的不知道如何做到这一点,我可以以某种方式将它保存到内存流而不是在程序中分配内存?或者可以通过其他方式进行保存,而不必将图像作为硬盘中的图像显示出来?

正如我所说的,我不能将图像作为硬盘驱动器上的常规图像使用,因此用户无法在没有应用程序的情况下查看图像。我需要找到一种不分配所有计算机内存的方式。

预先感谢您!

回答

0

该文件访问建立在的原理上,可以链接在一起。你可以做的是,不是直接通过文件流从磁盘读取/写入映像,而是在它之间插入一个CryptoStream

+0

这是为了创建图像为“加密”或至少不能在没有应用程序的情况下查看它? – syncis

+0

@syncis:通过将图像保存为“加密”在磁盘上,只能用应用程序查看文件(因为它知道如何解密它)。 – Oliver

+0

没有工作,使其更小,所以这个答案是帮助我的。 – syncis

1

将其保存到内存流和未分配内存的程序

号如果它在内存流,这显然是在RAM中。

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

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

+0

这仍然让我创建的文件中的所有图像文件到硬盘,我希望能找到一种方法来创建像只有1个文件,并保存到它的所有图像,但也许它不可能?但我一定会检查加密。 – syncis

+0

如果你想要一个包含所有图像的文件,那么你可以设计自己的格式来存储它们,或者将它们全部用随机文件名压入ZIP文件并加密。 – PhonicUK

+0

你的意思是设计你自己的格式?他们会被保存在该文件的列表中吗?如果我把它放在1个文件中,这不会增加内存分配吗? – syncis