Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在不分配300mb内存的情况下保存/使用图像_C#_.net_Visual Studio 2010_Image_Memory - Fatal编程技术网

C# 在不分配300mb内存的情况下保存/使用图像

C# 在不分配300mb内存的情况下保存/使用图像,c#,.net,visual-studio-2010,image,memory,C#,.net,Visual Studio 2010,Image,Memory,我正在.NET4.0C中构建一个windows项目 我现在正在将图像保存到硬盘,这根本不占用任何内存,因为我只在想要查看图像时加载图像。但现在我需要删除在硬盘中创建图像的操作,并以其他方式创建它。就像创建内存流并将其保存到对象,然后将其序列化到硬盘驱动器。重要的是,我不能让图像在硬盘中可见,它们必须被加密,或者在一个对象或其他东西中 所以…当我尝试将它放入内存流并保存到列表中,然后将其序列化到驱动器中时,我得到了巨大的程序内存分配,因为对于我创建的每个图像,并在列表中另存为内存流,我分配了该内存

我正在.NET4.0C中构建一个windows项目

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

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

我真的不知道该怎么做,我能把它保存到内存流中,而不在程序中分配内存吗?或者可以通过其他方式保存,而不让图片在硬盘中完全可见

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

提前谢谢你

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

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

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


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

文件访问是基于流的原理构建的,流可以插在一个链中。您可以做的是,不用直接通过文件流从磁盘读/写图像,而是在文件流之间插入一个GZIPStream和CryptoStream,以使图片更小并加密

这篇文章向您展示了如何


这仍然会让我将所有图像一个文件一个文件地创建到硬盘上,我希望找到一种方法,只创建一个文件,并将所有图像保存到其中,但这可能是不可能的?但我肯定会检查加密。如果你想要一个包含所有图像的文件,那么你可以设计自己的格式来存储它们,或者将它们全部放入一个带有随机文件名的ZIP文件中并加密。你是说设计自己的格式?它们会保存在该文件的列表中吗?如果我把所有的图像都放在一个文件中,这不会增加内存分配吗?就是这样,决定一种方法,将所有的图像存储在一个大的blob中。如果你不知道怎么做,就把它塞进拉链里。分配的内存量完全取决于您试图加载到RAM中的数据量,因此完全取决于您仅在磁盘上保存当前正在加载的图像和未使用的图像的情况。我将无法使用zip文件,因为如果不先解压缩文件,我将无法访问这些文件等等但是我很想把所有的东西都放在一个大团里,你有更多的信息吗?例如,如何将所有图像保存到blob文件,以及是否有一个包含所有图像的列表?这是用于将图像创建为“加密”还是至少在没有应用程序的情况下无法查看它?@syncis:通过将图像保存为“加密”在磁盘上,只能使用应用程序查看文件(因为它只知道如何解密).没能让它变小,所以这个答案对我很有帮助。