[转]WPF的BitmapImage的文件无法释放及内存泄露的问题

相信用过WPF的BitmapImage的,都在用类似这样的代码来解决文件无法删除的问题!

如果看看msdn上简单的描述,可以看到这样的说明:

如果 StreamSource 和 UriSource 均设置,则忽略 StreamSource 值。

如果要在创建 BitmapImage 后关闭流,请将 CacheOption 属性设置为 BitmapCacheOption.OnLoad。 默认 OnDemand 缓存选项保留对流的访问,直至需要位图并且垃圾回收器执行清理为止。

static class AppHelper
{
public static BitmapImage GetBitmapImage(string path)
{
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();

image.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = new MemoryStream(File.ReadAllBytes(path));
bitmap.EndInit();
bitmap.Freeze();
return bitmap;
}
}

文章来源 http://www.cnblogs.com/nio-nio/archive/2011/05/11/2043622.html#undefined

时间: 2024-08-27 16:23:19

[转]WPF的BitmapImage的文件无法释放及内存泄露的问题的相关文章

未关闭的文件流会引起内存泄露么?

最近接触了一些面试者,在面试过程中有涉及到内存泄露的问题,其中有不少人回答说,如果文件打开后,没有关闭会导致内存泄露.当被继续追问,为什么会导致内存泄露时,大部分人都没有回答出来. 本文将具体讲一讲 文件(流)未关闭与内存泄露的关系. 什么是内存泄露 定义:当生命周期长的实例L 不合理地持有一个生命周期短的实例S,导致S实例无法被正常回收 举例说明 上面的代码可能会发生内存泄露 我们调用AppSettings.getInstance.setup()传入一个Activity实例 当上述的Activ

WPF BitmapImage 占用资源无法释放、无法删除问题

原文:WPF BitmapImage 占用资源无法释放.无法删除问题 使用Image控件显示图片后,虽然自己释放了图片资源,Image.Source =null 了一下,但是图片实际没有释放.解决方案:修改加载方式~        public static BitmapImage GetImage(string imagePath)        {            BitmapImage bitmap = new BitmapImage();            if (File.E

WPF借助SaveFileDialog实现文件存储

以下是我的代码,对初涉WPF者有点用.wholestring是要写入文件的字符串. Microsoft.Win32.SaveFileDialog saveFileDialog = new Microsoft.Win32.SaveFileDialog(); //可能要获取的路径名 string localFilePath = "", fileNameExt = "", newFileName = "", FilePath = ""

在wpf中运行EXE文件

最简单的方法:System.Diagnostics.Process.Start(@"路径"); 网上的其他方法: Process p = new System.Diagnostics.Process(); p.StartInfo.FileName [email protected]"路径"; p.StartInfo.Arguments = ""; p.StartInfo.UseShellExecute = false; p.StartInfo.R

WPF:自定义Metro样式文件夹选择对话框FolderBrowserDialog

1.前言 WPF并没有文件选择对话框,要用也就只有使用Winform版的控件.至今我也没有寻找到一个WPF版本的文件选择对话框. 可能是我眼浊,如果各位知道有功能比较健全的WPF版文件选择对话框.文件打开对话框,还请留言告知. 这次做的是一个精简版的文件选择对话框.包含一个UserControl和一个承载UserControl的Window. 另外TreeView的样式引用自Mahspps中的样式.也就是如果需要使用这个文件选择对话框,就必须要引用Mahapps的相关dll. 当然,我会提供整个

WPF中textbox加入文件拖放操作

namespace WpfApplication1{ public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void textbox1_PreviewDragOver(object sender, DragEventArgs e) { e.Effects = DragDropEffects.Copy; e.Handled = true; } private

wpf 前台获取资源文件路径问题

1 <ImageBrush ImageSource="YT.CM.CommonUI;component/Resource/FloadwindowImage/middle.png"/> YT.CM.CommonUI  这是一个类库名字 Resource 这是类库下的文件夹 FloadwindowImage 是Resource下的文件夹 middle.png 是FloadwindowImage下的一张图片 若在使用上句在wpf前台获取该类库下的文件夹中的图片资源,可能会报该路径

C# WPF中调用打开文件对话框的代码

把内容过程经常用到的一些内容片段收藏起来,如下的内容内容是关于C# WPF中调用打开文件对话框的内容. private string OpenDialog() { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Title = "选择文件"; openFileDialog.FileName = string.Empty; openFileDialog.FilterIndex = 1; openFi

三种方法,让WPF项目生成单文件

原文:三种方法,让WPF项目生成单文件 在使用WPF写一些小工具时,往往需要将多个DLL文件嵌入到EXE文件里,生成单文件.这里介绍三种方案: 把DLL文件作为嵌入资源 使用Costura.Fody 使用.NET Reactor. 一.把DLL文件转换为嵌入资源 第一步,在项目中新建Resources文件夹,把需要的dll文件拷贝到该目录中(可以是多个dll文件),然后修改每个文件的属性,将生成操作改为嵌入的资源,例如: 拷贝dll文件 修改生成操作 第二步,修改App.xaml.cs文件,添加