大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

严重内存泄漏困扰 WPF

  • 2009-10-19
  • 本文字数:748 字

    阅读完需:约 2 分钟

Windows Presentation Foundation 即 WPF,它代表着 Windows 平台 UI 的未来。微软有其自身的打算,而稍晚于 WPF 的 Silverlight 将占领 Web 和移动设备市场。不过,和任何的新技术一样,都会经历一些问题,如某些相当严重的内存泄漏问题。

我们要讨论诸多内存泄漏。第一个问题已经发现一段时间,但它并没有引起大多程序员的关注,甚至是专家们的注意。引发该问题需要以下条件配合:

  1. 引用对象 X 属性 P 的数据绑定路径
  2. 对象 X 含直接引用或间接引用数据绑定操作的目标对象
  3. 属性 P 通过 PropertyDescriptor 对象而非 DependencyProperty 对象或 PropertyInfo 对象访问

这个问题在 KB 938416 中有详细的描述。

接下来是一个让人极其厌烦的 Bug,它在我们使用一个数据绑定集合代替另外一个时触发。Ayende Rahien 有引发该问题的源代码。 Mike Brown 解释道:

经过深入研究以后,我发现该绑定系统并没有解除对“Name”属性的监听程序,但相关数据已被修改。

这很明显是一个 Bug,它和绑定系统有关。当你注意到数据被修改过,而非解除已有绑定(这次假设 Name 绑定 Textblock)并再次使用该元素,就像重新创建元素集那样。不幸的是,Textblock 从来没有解除该绑定。现在如果让数据变成可观测的集合(必要情况下把匿名类型转换为标准的类)并让该集合触发 CollectionChanged 事件(例如:Data[0]=Data[0]),一切运行正常。

以下的内存泄漏来自于 jgoldb 的微软博客上:

  • 如果初始 HWND 在 XP 上被撤销就会导致 CMilChannel 泄漏
  • 使用绑定的每条线程会导致 ShutdownListener 泄漏
  • 在 XP 的 HW 中创建和消除 WriteableBitmap
  • SW Viewport 3D w/ VisualBrush 和 WB 等,都会在 XP 上引起泄漏问题

除了这些泄漏以外,他还列出了一些其他的常见开发错误导致的内存泄漏,以及一些已修复的WPF 问题。

查看英文原文: Serious Memory Leaks Plague WPF

2009-10-19 21:143441
用户头像

发布了 87 篇内容, 共 24.9 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

一起玩转LiteOS组件:Pixman

华为云开发者联盟

LiteOS LiteOS组件 Pixman Pixman Demo LiteOS组件仓库

一文带你了解数仓智能运维框架

华为云开发者联盟

运维 GaussDB(DWS) 智能运维框架 调度框架 任务调度器

推荐 3 个 React 动画库

devpoint

React 网页动画 2月月更

RTE2021 回顾丨HDR 技术产品实践与探索

声网

人工智能 HDR

拒绝做工具小子—编写Python漏洞验证脚本

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

AI象棋,谁与争锋

乌龟哥哥

AI 2月月更

react源码解析3.react源码架构

buchila11

React

【架构训练营-模块二】

默光

微信朋友圈 架构训练营5期

设计模式【13】-- 模板模式怎么弄?

秦怀杂货店

Java 设计模式 23种设计模式

不会用SpringBoot连接Redis,那就赶紧看这篇

华为云开发者联盟

redis 开发 springboot Redis服务器

AI+Science:基于飞桨的AlphaFold2,带你入门蛋白质结构预测

百度大脑

Linux之vmstat命令

入门小站

Linux

关于如何构建 Go 代码的思考

宇宙之一粟

Go 语言 2月月更

Java异常处理:如何写出“正确”但被编译器认为有语法错误的程序

华为云开发者联盟

Java 代码 java异常处理 语法 Exception

在线ASCII流程图编辑器工具

入门小站

工具

mysql 面试总结

yuexin_tech

面试

B站员工猝死,审核员之殇,谁该反省?谁该惭愧?技术层面解构内容安全审核系统(python3)

刘悦的技术博客

系统架构 内容审核 Python3 应用审核 构架

固态存储行业领导者硅格半导体加入龙蜥社区,共同推动开源生态建设

OpenAnolis小助手

Linux 开源 社群运营

王者荣耀商城异地多活设计

皓月

「架构实战营」

运维与微服务结合?深度解析微服务框架Tars整体解决方案

云智慧AIOps社区

DevOps 微服务 运维 云原生 TARS

架构训练营 week10 课程总结

红莲疾风

「架构实战营」

BIGO 使用 Flink 做 OLAP 分析及实时数仓的实践和优化

Apache Flink

大数据 flink 编程 后端 实时计算

在线学习FTRL介绍及基于Flink实现在线学习流程|社区征文

张浩_house

机器学习 大数据 flink 新春征文

百度手机助手存储资源优化实践

百度Geek说

后端 存储

一个人手写APP监控平台是什么体验 | 社区征文

一诺倾心

flutter android 性能优化 APM

一文搞明白直播和点播的区别 | 社区征文

liuzhen007

音视频 新春征文 2月月更

产品经理角色理解

wood

300天创作

领域模型设计该如何落地到数据库设计?

蜜糖的代码注释

Java DDD 领域模型 2月月更

java培训:SpringBoot技术的理解

@零度

JAVA开发 spring-boot

前端培训:Vue 面试题分享

@零度

Vue 前端开发

严重内存泄漏困扰WPF_.NET_Jonathan Allen_InfoQ精选文章