C# WPF Image Source 频繁切换导致垃圾回收不及时导致内存占用不断增加的问题

简介: C# WPF Image Source 频繁切换导致垃圾回收不及时导致内存占用不断增加的问题
        [DllImport("gdi32.dll", SetLastError = true)]
        private static extern bool DeleteObject(IntPtr hObject);

        /// <summary>
        /// 转Bitmap
        /// </summary>
        /// <param name="srcFile">源文件</param>
        /// <returns></returns>
        public static BitmapSource BitmapToBitmapImage(string srcFile)
        {
            if (!File.Exists(srcFile))
                return null;
            System.Drawing.Bitmap bmp = System.Drawing.Bitmap.FromFile(srcFile) as System.Drawing.Bitmap;
            var ptr = bmp.GetHbitmap();
            var source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                  ptr, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
            source.Freeze();
            bmp.Dispose();
            DeleteObject(ptr);
            return source;

            // 下面的代码会导致内存回收不及时,内存很长时间才会回收
            //BitmapImage image = new BitmapImage();
            //image.BeginInit();
            //using (MemoryStream stream = new MemoryStream(File.ReadAllBytes(srcFile)))
            //{
            //    //bitmap.Save(stream, ImageFormat.Bmp); // 坑点:格式选Bmp时,不带透明度
            //    //stream.Position = 0;
            //    // According to MSDN, "The default OnDemand cache option retains access to the stream until the image is needed."
            //    // Force the bitmap to load right now so we can dispose the stream.
            //    image.CacheOption = BitmapCacheOption.OnLoad;
            //    image.StreamSource = stream;
            //    image.EndInit();
            //    image.Freeze();
            //}
            //return image;
        }
目录
相关文章
|
7月前
|
存储 Java C#
C# 中的值类型与引用类型:内存大小解析
C# 中的值类型与引用类型:内存大小解析
C# WPF 中 外部图标引入iconfont,无法正常显示问题 【小白记录】
本文介绍了在C# WPF应用程序中引入外部iconfont图标时可能遇到的显示问题及其解决方法:1) 检查资源路径和引入格式是否正确,确保字体文件引用格式为“#xxxx”,并正确指向字体文件位置;2) 确保图标资源被包含在程序集中,通过设置字体文件的生成操作为Resource(资源)来实现。
C# WPF 中 外部图标引入iconfont,无法正常显示问题 【小白记录】
|
4月前
|
编解码 C# 数据库
C# + WPF 音频播放器 界面优雅,体验良好
【9月更文挑战第18天】这是一个用 C# 和 WPF 实现的音频播放器示例,界面简洁美观,功能丰富。设计包括播放/暂停按钮、进度条、音量控制滑块、歌曲列表和专辑封面显示。功能实现涵盖音频播放、进度条控制、音量调节及歌曲列表管理。通过响应式设计、动画效果、快捷键支持和错误处理,提升用户体验。可根据需求扩展更多功能。
161 3
|
3月前
|
C# 开发工具 Windows
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
91 0
|
5月前
|
C#
C# WPF 将第三方DLL嵌入 exe
C# WPF 将第三方DLL嵌入 exe
112 0
|
5月前
|
前端开发 C# 容器
WPF/C#:实现导航功能
WPF/C#:实现导航功能
120 0
|
5月前
|
设计模式 测试技术 C#
WPF/C#:在WPF中如何实现依赖注入
WPF/C#:在WPF中如何实现依赖注入
98 0
|
5月前
|
前端开发 C# Windows
WPF/C#:如何实现拖拉元素
WPF/C#:如何实现拖拉元素
61 0
|
5月前
|
存储 C# 索引
WPF/C#:BusinessLayerValidation
WPF/C#:BusinessLayerValidation
38 0
|
5月前
|
C#
WPF/C#:数据绑定到方法
WPF/C#:数据绑定到方法
56 0