.net4 中仍然存在内存泄漏 - 将内存 BitmapImage 绑定到 Image-Source

2024-01-21

我知道过去曾在这里提出过非常类似的问题 - 但都没有解决我的问题:

我将内存中的图像加载到 BitmapImage 中:

    private static BitmapImage LoadImage(byte[] imageData)
    {
        if (imageData == null || imageData.Length == 0) return null;
        var image = new BitmapImage();
        using (var mem = new MemoryStream(imageData))
        {
            mem.Position = 0;
            image.BeginInit();
            image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
            image.CacheOption = BitmapCacheOption.OnLoad;
            image.UriSource = null;
            image.StreamSource = mem;
            image.EndInit();
        }
        image.Freeze();
        return image;
    }

然后使用它(与 INotifyPropertyChange 一起)将生成的 BitmapImage 绑定到 Image 对象的 Source(在页面上)。

问题是:这会泄漏内存(在我的例子中,2-3 张图像上的内存高达 300MB!)

You don't even find this using Profilers - only the .net Memory Profiler got me on track (as it's in unmanaged memory where all the bytes go - so ANTS tell me ".NET is using 19,24MB of 367,3MB total private bytes allocated to the application" - nice): Memory-Profiler output

无论我如何尝试,我都无法消除这种泄漏。 尝试过(单个且一次全部):

  • 清除视觉树/删除卸载时的图像
  • 将图像源设置为空
  • 在 Rectangle 中使用 ImageBrush 而不是 Image
  • 其他 CacheOptions 而不释放 MemoryStream
  • 不要冻结图像

我不明白这一点——真的! 一旦我停止使用源中的图像,一切就正常了(没有泄漏)。

有人我可以尝试什么选择吗?

REMARK看来这根本不是错误(请参阅我的第二条评论)-我必须检查这一点,所以我现在要开放这个问题-也许这也可以帮助解决有关此问题的其他问题


抱歉各位 - 这确实不是“BUG”,而是由高分辨率图片引起的。

如果我应该删除这个问题,或者我是否应该把它留在这里,请对此发表评论,因为其他人可能会遇到同样的情况......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.net4 中仍然存在内存泄漏 - 将内存 BitmapImage 绑定到 Image-Source 的相关文章

  • 如何在 WPF 应用程序中实现气球消息

    我们想使用气球消息 如UX Guide http msdn microsoft com en us library aa511451 aspx来自微软 我发现一些示例使用 Windows 窗体中的本机代码 但本机代码需要组件的句柄 这对于
  • WPF 中的屏幕分辨率问题?

    我将在 WPF 中使用以下代码检测分辨率 double height System Windows SystemParameters PrimaryScreenHeight double width System Windows Syste
  • 树视图上下文菜单命令未触发

    我有一个绑定到某些属性类型的 Observable 集合的树视图 有一个 HierarchicalDataTemplate 在树视图中显示数据 现在我需要显示每个 HierarchicalDataTemplate 项目的特定上下文菜单 我使
  • 了解使用 Windows 本机 WPF 客户端进行 ADFS 登录

    我已经阅读了大量有关 ADFS 与 NodeJS Angular 或其他前端 Web 框架集成以及一般流程如何工作的文献 并通过 Auth0 Angular 起始代码构建了概念证明 但我不明白如何这可以与本机 WPF Windows 应用程
  • 我的 WPF 应用程序中的 SaveFileDialog 异常

    我的一位客户在保存文件时遇到 WPF 应用程序崩溃的情况 我的保存文件代码是 var saveFileDialog new SaveFileDialog InitialDirectory string Concat Environment
  • 如何使用DocumentViewer显示流程文档?

    我的资源中有一个简单的流程文档 FlowDocument1 xaml
  • 使用 BlockingCollection 更新 ObservableCollection

    我订阅了一项服务 当收到新元素时 该服务将引发一个事件 我将此元素添加到BlockingCollection 我有第二个线程正在运行 它将循环BlockingCollection添加 更新可观察集合中的元素 问题是你如何添加Observab
  • WPF 中列表框的数据验证

    我有一个 ListBox 绑定到类型 T 的 ObservableCollection 每个 ListBoxItem 都是一个复选框 IsChecked 绑定到 T 中的 bool 属性 我想验证 ListBox 中的选中项 以便至少必须选
  • 当其源是 https uri 时如何使 wpf MediaElement 播放

    在 wpf 独立应用程序 exe 中 我在主窗口中包含了 MediaElement
  • 将 MahApps 图标与 ContextMenu 结合使用

    我正在使用 MahApps Metro UI 工具包编写 WPF 应用程序 http mahapps com guides quick start html http mahapps com guides quick start html
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • RelayCommand 未在 MenuItem 单击 WPF MVVM 上触发

    我的 WPF 表单上有一个运行导入例程的菜单项 我已将命令属性绑定到视图模型中的 ICommand 属性 但由于某种原因该方法不会触发 这是 xaml menu height 21 menu
  • 如何使用 ObjectDataProvider 将枚举绑定到 XAML 中的 ComboBox

    我正在尝试绑定一个Enum to a ComboBox 我见过很多人使用ObjectDataProvider但我似乎无法访问它 我还注意到有些人在一段时间内使用它Window Resources 而不是Page Resources但我找不到
  • 用户泄漏、libc++ 泄漏或误报

    我正在使用 clang 编译器和 libc 标准库在 C 11 中的 mac 上构建动态库 当我在链接到动态库的测试代码上运行 valgrind 时 我得到一块肯定丢失的内存 这是 valgrind 报告 45659 36 bytes in
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • 当其他列子项折叠时调整 WPF 网格列的大小?

    我有两个控件Grid 并且需要制作一个来填充所有Grid另一个获得后的空间Collapseded 我不知道什么Container我可以使用吗 我试过了StackPanel and DockPanel我也是 但找不到好的解决方案 这是我的代码
  • 异步WCF调用来保存线程?

    In 另一个问题 https stackoverflow com q 19731600 279516 建议我发送异步网络请求 而不是在后台线程上发送同步请求 原因是为了不浪费一根线 我试图理解这是怎么回事 这是最初的做法 我可以理解这里怎么
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • DOM 解析器 Chrome 扩展内存泄漏

    问题 我开发了一个扩展程序 可以拦截 Web 请求 获取 Web 请求来源的 HTML 并对其进行处理 我使用 DOMParser 来解析 HTML 并且意识到 DOMParser 正在导致大量内存泄漏问题 最终导致 chrome 扩展崩溃

随机推荐