繁体   English   中英

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

[英]Save/Use images without allocating 300mb memory

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

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

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

我真的不知道如何执行此操作,我可以以某种方式将其保存到内存流中而不在程序中分配该内存吗? 还是可以以其他方式保存它而不会在硬盘中将图像完全显示为图像?

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

先感谢您!

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

否。如果它在内存流中,则显然是在RAM中。

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

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

文件访问基于的原理构建,可以将其插入链中。 您可以做的是,您无需在文件流之间插入CryptoStream ,而是通过文件流直接从磁盘读/写图像。

您可以使用GZIPStream和CryptoStream来缩小图片并对其进行加密。

本文确切地向您展示了如何;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM