惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LINUX DO - 最新话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
PCI Perspectives
PCI Perspectives
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
H
Heimdal Security Blog
S
Security @ Cisco Blogs
N
News | PayPal Newsroom
J
Java Code Geeks
罗磊的独立博客
Security Archives - TechRepublic
Security Archives - TechRepublic
N
News and Events Feed by Topic
V
V2EX
WordPress大学
WordPress大学
Google Online Security Blog
Google Online Security Blog
N
News and Events Feed by Topic
www.infosecurity-magazine.com
www.infosecurity-magazine.com
月光博客
月光博客
AI
AI
小众软件
小众软件
The GitHub Blog
The GitHub Blog
MongoDB | Blog
MongoDB | Blog
A
Arctic Wolf
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
美团技术团队
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
Tailwind CSS Blog
S
Schneier on Security
博客园 - 三生石上(FineUI控件)
F
Full Disclosure
B
Blog RSS Feed
Forbes - Security
Forbes - Security
S
SegmentFault 最新的问题
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
人人都是产品经理
人人都是产品经理
云风的 BLOG
云风的 BLOG
Jina AI
Jina AI
Cisco Talos Blog
Cisco Talos Blog
U
Unit 42
Project Zero
Project Zero
H
Hacker News: Front Page
Y
Y Combinator Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The Cloudflare Blog
大猫的无限游戏
大猫的无限游戏
S
Secure Thoughts
The Hacker News
The Hacker News
Microsoft Azure Blog
Microsoft Azure Blog

博客园 - 思无邪

Silverlight内存泄露(八)样式 Silverlight内存泄露(七)Command Silverlight内存泄露(六)MEF等Ioc框架引起内存泄露-ExportLifetimeContext Silverlight内存泄露(五)MEF等Ioc框架引起内存泄露-PartCreationPolicy Silverlight内存泄露(二)检测内存泄露 从火狐放弃依据特性更新版本说起 Silverlight内存泄露(二)解决内存泄露之Dispose误用 Silverlight内存泄露(一)序 Silverlight IReader阅读器第二版 silverlight阅读器——面向领域的浏览器(二)——Silverlight阅读器架构 silverlight阅读器——起源面向领域的浏览器——概念 silverlight异步陷阱(二)循环 silverlight 异步陷阱(一)不能Remove事件处理程序 IReader Silverlight电子阅读器介绍开源项目 silverlight在线阅读器(二):为silverlight增加gb2312编码 silverlight在线阅读器(一):介绍 新建立一个类似于CuteEditor的项目,希望有人参加。发布一个测试版本的dll 从控件开发的角度看几个editor控件,Freetextbox,radtoolbar,abouteditor,cuteeditor 想做一个关于word解析和HtmlEditor的项目,希望有人加入 cuteEditor6.0的破解方式与Cuteeditor6.0的脚本调试
Silverlight内存泄露(四)解决内存泄露
思无邪 · 2011-04-13 · via 博客园 - 思无邪

定位泄露内存的对象很容易,但是找出引起泄露的原因并不容易,因为从GC到目标对象(内存泄露对象)的路径不只一条,找出哪条路径引起了内存泄露是非常烦人的工作,大部分情况只能凭借自己的经验。

一般我们都不会关注内存问题,当内存成为问题的时候,程序可能都开发完成了,这时候对象图会引入第三方库、.net 框架、本公司的其他库,需要梳理GC到目标对象的所有路径,并测试每一条路径,确认哪条引起了内存泄露。在测试某条路径的时候,需要排除其他路径对内存泄露的影响,这时候排除其他路径影响非常难,会牵涉到很多代码的改动。

以一个例子说明如何解决内存泄露,强制GC后,对比两个快照,发现没有被回收的对象,如下图BookPageSearche不是当前页面(现在看着还头疼,内存问题真是一个可以让人发疯的问题):

3

这张图包含了Command、Event、Style、MEF引起的内存泄露,几乎包括所有我发现的内存泄露情况,这一篇讨论内存泄露的通用解决方案,不会针对每种问题讨论。

看标记出的几个点:

对目标来说,如果切断1,目标对象肯定会被释放,但是目标对象的直接父对象属于.net控件,不可能在这一点切断路径。

对于标记2,切断它会切断3、4、5,标记二NavigationCommand属于自己的代码可以在此释放内存,但并不应该在此释放。

标记3、5圈起来的部分,是由其他View内存引起的问题与这个目标对象关系不大,其他View(About、SIteNav)内存被释放后,这个路径自动被切断。

标记9是由自定义导航框架引起的内存泄露。

标记8是由MEF引起的内存泄露,并且是唯一与目标对象直接有关的路径(BookPageSearche),在这个目标中应从此点着手释放内存。

下面一张图是和上一张对照的,可对照看。显示了BookPageSearche是当前页面时的对象图,未执行GC。

3

需要避免的误区

第一直觉肯定是目标对象的直接父对象,只要他释放,不用再管更上层的诸多引用,如果这么处理可能属于头痛医头脚痛,不找点最合适的切断路径的点,会给程序修改带来灾难,后续会出现数不清的需要释放的对象。所以在释放内存是一定要避免不分析清楚直接下手释放。

总解

不知道有多少人能看的懂,这篇的目的只是提供一种通用的分析方法,分析出从GC到目标对象的多条路径应该选择哪几条路径释放内存,选择了合适路径以后又该在路径中的那个对象出断开引用。这其中的分析大部分只能凭借经验。

一些技巧

多看几个类似的对象图,比如找View的内存泄露,多看几个View,如About、Home等,从中找到共同点。

对于某个对象图,只解决直接和这个对象有关的内存泄露,而忽略由其他对象引起的内存问题。

从最简单的泄露问题着手,解决了一个泄露问题,会发现对象图会小很多,再分析其他泄露问题会简单一些。