[英]Out of memory exception when writing a large file (300MB) to memory stream
[英]Save/Use images without allocating 300mb memory
我正在.net 4.0 c#中构建Windows项目。
我现在将图像保存到硬盘驱动器,这根本不占用任何内存,因为我只想查看一次就加载图像。 但是现在我需要删除硬盘驱动器中图像的创建并以其他方式创建它。 就像创建内存流并将其保存到对象并将其序列化到硬盘驱动器一样。 重要的是,我无法在硬盘中看到图像,必须将其加密或放在对象或其他物体中。
所以......当我尝试将其放入内存流中并保存到列表中,然后将其序列化到驱动器中时,我得到了一个巨大的程序内存分配,因为对于我创建的每个图像,都将其另存为内存流列表中,我分配了该内存,我的程序变大了2-300 mb。
我真的不知道如何执行此操作,我可以以某种方式将其保存到内存流中而不在程序中分配该内存吗? 还是可以以其他方式保存它而不会在硬盘中将图像完全显示为图像?
正如我所说,主要的事情是,我无法在硬盘驱动器上将这些图像作为常规图像使用,如果没有该应用程序,用户一定无法查看它们。 而且我需要找到一种不分配所有计算机内存的方法。
先感谢您!
将其保存到内存流中,而不在程序中分配该内存
否。如果它在内存流中,则显然是在RAM中。
因此,您需要将映像完全存储在RAM中,或将其保存到磁盘。
如果您不希望它在磁盘上可见,则需要对文件进行加密,以使用户无法在应用程序之外查看它。 加密的强度取决于您希望破解的难度。 如果您不太在意,那么非常基本的XOR加密将非常快并且不会增加文件的大小。 如果您确实关心,那么您想使用3DES之类的东西。
文件访问基于流的原理构建,可以将其插入链中。 您可以做的是,您无需在文件流之间插入CryptoStream
,而是通过文件流直接从磁盘读/写图像。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.