对图片的引用如何释放内存资源?

问题描述

今天搞程序遇到一个很棘手的问题如下:新建了一个bmp图Bitmapzxwd_bmp=newBitmap(900,270);先把内存中的图片保存publicvoidsave_image()//以jpg格式保存内存中的图片{stringpath1=DateTime.Now.ToString("yyyy.MM.dd.HH.mm.ss");stringpath=Application.StartupPath+"\image\"+path1+".jpg";this.zxwd_bmp.Save(path,System.Drawing.Imaging.ImageFormat.Jpeg);}再把图片读到picturebox里面publicvoidread_image_toform()//把图片读到picturebox里面{stringopenfilename=Application.StartupPath+"\image\"+maxstr;this.zxwd_yuan_pictureBox.Image=Image.FromFile(openfilename);}最后删除这个图片publicvoiddelete_iamge()//删除所有图片{try{for(intdel_i=0;del_i<files.Length;del_i++){stringdelpath=Path.GetDirectoryName(Application.ExecutablePath)+"\image"+"\"+files[del_i].ToString();if(maxstr==files[del_i].ToString()){}else{System.IO.File.Delete(delpath);}}}catch(Exceptiondel_image_ex){MessageBox.Show(del_image_ex.ToString());}}在最后删除图片的时候出现了异常,说是其它进程占用了这个图片无法删除!汗~!我试了很多次,就算是给zxwd_yuan_pictureBox加载了其它的图片也不是说有其它进程仍然占用了这个图片,这个问题怎么解决?请大家帮帮忙。程序要得比较急,在线等,拜托了。!

解决方案

解决方案二:
else{this.zxwd_yuan_pictureBox.Image=null;System.IO.File.Delete(delpath);}
解决方案三:
学习中~~~~~
解决方案四:
把图片读到内存中吧this.zxwd_yuan_pictureBox.Image=Image.FromFile(openfilename);是连接图片文件的
解决方案五:
怎么把图片读到内存中啊?大哥帮帮忙啊.!
解决方案六:
还有二楼的朋友else{this.zxwd_yuan_pictureBox.Image=null;System.IO.File.Delete(delpath);}这种方法根本行不通啊.仍然是有另一个进程在使用那个图片.还麻烦你再帮我想想.
解决方案七:
先引用System.IObyte[]byteimg=newbyte[10000];using(FileStreamf=newSystem.IO.FileStream("c:\mai.jpg",FileMode.Open)){f.Read(byteimg,0,10000);MemoryStreamm=newMemoryStream(byteimg);Bitmapbitmap=newBitmap(m,false);this.pictureBox1.Image=bitmap;}
解决方案八:
还有没有更好的方法?
解决方案九:
友情UP一下
解决方案十:
读字节流到内存中再关闭流是比较好的方法,这种方法不会造成对文件的引用。
解决方案十一:
GC.Collect();
解决方案十二:
kkk_visual的方法可行,我以前的一个项目中也碰到这个问题了.后来查了MSDN后才知道了原因.所以如果要对图片文件做一些操作,我尽量不用..FromFile这个方法,用了这个方法会对文件产生Lock.
解决方案十三:
up
解决方案十四:
up
解决方案十五:
问完了,人跑了

时间: 2024-07-30 04:06:52

对图片的引用如何释放内存资源?的相关文章

Windows 2003中巧妙释放内存资源

经常看到有朋友在论坛上诉苦说需要释放内存,其实如果你安装了 Windows 2003 的话,那么并不需要寻求那些需要注册才能长久使用的第三方内存管理软件.因为Windows 2003已经自带了一个名为Empty.exe的小程序,它可以用来释放某些应用程序在占用大量内存时不能及时释放的那部分资源,与那些第三方软件内存管理软件不同的是,Empty.exe不会强迫系统全部释放资源,而是仅仅释放必要的资源,这样就不会加重硬盘的负担了. Empty.exe的使用相当简单,命令格式如下: Empty.exe

ardroid图片缓存中,利用强引用缓存到内存的图片生命周期是什么?

问题描述 ardroid图片缓存中,利用强引用缓存到内存的图片生命周期是什么? 是会在该应用的内存一直保存下去还是说当该应用退出后,图片即被回收 ?

WPF 引用DLL纯图像资源包类库中的图片

原文:WPF 引用DLL纯图像资源包类库中的图片 1.建立WPF应用程序              过程略.   2.创建类库项目(图片资源包)       创建图片资源类库项目MyImages,删除class1.cs,在项目属性的资源选项中选择"图像"类型,并在"添加资源"中点击"添加现有的文件",把图像加入到资源.并把访问修饰符改为Public.   3.在WPF应用程序中引用类库项目        在WPF中通过 MyImages.Prop

解析PHP中的内存管理,PHP动态分配和释放内存

本篇文章是对PHP中的内存管理,PHP动态分配和释放内存进行了详细的分析介绍,需要的朋友参考下   摘要 内存管理对于长期运行的程序,例如服务器守护程序,是相当重要的影响:因此,理解PHP是如何分配与释放内存的对于创建这类程序极为重要.本文将重点探讨PHP的内存管理问题. 一. 内存在PHP中,填充一个字符串变量相当简单,这只需要一个语句"<?php $str = 'hello world '; ?>"即可,并且该字符串能够被自由地修改.拷贝和移动.而在C语言中,尽管你能够

java中怎么释放所有资源?

问题描述 java中怎么释放所有资源? 解决方案 解决方案二:这篇文章回答的还蛮详细的,楼主可以看看!解决方案三:java中有自己的垃圾回收机制啊!没有引用的内存空间都会被自动释放的!!解决方案四:System.exit(0)就释放掉了所有资源解决方案五:java虚拟机是自己回收无用的对象和引用.不用程序员写代码来释放资源.解决方案六:GC机制解决方案七:System.gc();解决方案八:LZ说的是所有资源哦解决方案九:如果是说回收垃圾或者无用资源,那么java自带回收机制,不需要程序员显式调

.net程序中如何有效释放内存?

问题描述 最近我做.net项目,发现该程序并没有自动释放内存,我想知道如何在.net程序里面有效释放内存呢?或者使用什么数据结构才能有效释放内存呢?请高手指点啊! 解决方案 解决方案二:.net没有这个问题.所以没有什么数据结构可以解决你的问题,你应该看看你的程序为什么一直在使用着对象.解决方案三:.net具有自动垃圾回收机制,会在某一时刻启动帮你对垃圾回收堆的无用数据进行垃圾回收,会被认为是垃圾的对象是那些经CLR检查后认为没有任何栈中的对象或寄存器.WINDOWS句柄等非垃圾回收堆的数据所引

解析PHP中的内存管理,PHP动态分配和释放内存_php技巧

摘要 内存管理对于长期运行的程序,例如服务器守护程序,是相当重要的影响:因此,理解PHP是如何分配与释放内存的对于创建这类程序极为重要.本文将重点探讨PHP的内存管理问题. 一. 内存在PHP中,填充一个字符串变量相当简单,这只需要一个语句"<?php $str = 'hello world '; ?>"即可,并且该字符串能够被自由地修改.拷贝和移动.而在C语言中,尽管你能够编写例如"char *str = "hello world ";&qu

Linux释放内存的方法

在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好.但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,此时就需要执行释放内存(清理缓存)的操作了.    Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到inode的转换).Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作.但是在进行了大量文件操作之后,缓存会把内存资源基本用光.但实际上我们文件操作

在Applet中引用jar中的资源文件的方法

如果想要做一个比较漂亮的Applet让人家使用,一定会加上很多资源,比如图片或者声音文件什么的. sun提供了一个有用的工具,jar.这个工具可以把这些资源文件合在一个文件里,避免频繁的http request, 而且下载的jar文件可以被缓存,很爽吧. 但是如何正确引用jar中的资源呢? 比如我们打算显示一个图片按钮,图片相对路径为./img/logo.gif,你可以自己随便找一个gif图片. 让我们来看看我们想当然的做法. import java.awt.*; import java.awt