dinghao

记录成长点滴

 

04 2011 档案

Silverlight内存泄露(八)样式
摘要:同一个程序,换一个主题、换一个样式,可能造成内存泄露。 演示Sytle引起的内存泄露 这一系列写到八了,将要结束,还没有一个直观例子说不过去,样式发生内存问题最难找也最隐蔽,做了小例子说明内存泄露问题。 例子下载:MemoryLeak.rar例子中ProgressBar样式引起内存泄露,为直观每次导航分配50M内存。 a) 继续使用ANTS检测内存问题,但ANTS属于收费软件 b) 也可使用免费的进程浏览器,启动 Process Explorer.,在sllauncher.exe进程右击,选择属性,在Home、About间导航。 每次导航内存增加50M 注释掉ProgressBar样式后,内存 阅读全文

posted @ 2011-04-18 13:28 思无邪 阅读(1979) 评论(6) 推荐(2)

Silverlight内存泄露(七)Command
摘要:MVVM中View与ViewModel是强引用的双向关联关系,容易发生内存泄露,任何一方没有被回收都会导致另一方不能被GC回收。 Comand连接了View与ViewModel,容易产生内存泄露。 发现内存泄露 在几个View间导航几次,两次导航到View页面,获取内存快照,发现Info有两个实例。内存没有被释放。 为了每次导航到消息页面,都保存上一次显示的信息,InfoViewModel采用了单例模式,作为缓存,InfoViewModel只有一个实例,按照设想Info也应该只有一个实例。 代码: var lazyViewModelMapping= LazyViewModelExports.. 阅读全文

posted @ 2011-04-17 16:06 思无邪 阅读(2082) 评论(3) 推荐(2)

Silverlight内存泄露(六)MEF等Ioc框架引起内存泄露-ExportLifetimeContext
摘要:对象的创建可以使用new,也可以使用IOC架如:castle、MEF等,IOC创建的对象的生命周期,可能IOC负责管理,使用框架的开发者如果不弄清楚可能会造成内存泄露问题。这些内存泄露问题并不是IOC框架的bug,只是开发者使用不当或者不注意造成的内存泄露问题。以MEF为例说明我碰到的两种内存泄露问题。内存泄露系列阅读提示:一摸一样的对象图,有时候我们可以认为它是内存泄露,有时候又认为它不是内存泄露,这一切只是由于上下文不同,这一系列文章中ANTS Memoery Profle截图都是有特定上下文,单独看完全没有意义。如何确定是内存泄露?可以参考前面的文章。对象以图的形式存在,Ants Mem 阅读全文

posted @ 2011-04-15 14:06 思无邪 阅读(1813) 评论(2) 推荐(4)

Silverlight内存泄露(五)MEF等Ioc框架引起内存泄露-PartCreationPolicy
摘要:对象的创建可以使用new,也可以使用IOC架如:castle、MEF等,IOC创建的对象的生命周期,可能IOC负责管理,使用框架的开发者如果不弄清楚可能会造成内存泄露问题。 这些内存泄露问题并不是IOC框架的bug,只是开发者使用不当或者不注意造成的内存泄露问题。 以MEF为例说明我碰到的两种内存泄露问题。 内存泄露系列阅读提示: 一摸一样的对象图,有时候我们可以认为它是内存泄露,有时候又认为它不是内存泄露,这一切只是由于上下文不同,这一系列文章中ANTS Memoery Profle截图都是有特定上下文,单独看完全没有意义。如何确定是内存泄露?可以参考前面的文章。 对象以图的形式存在,An. 阅读全文

posted @ 2011-04-14 21:21 思无邪 阅读(2732) 评论(3) 推荐(5)

Silverlight内存泄露(四)解决内存泄露
摘要:定位泄露内存的对象很容易,但是找出引起泄露的原因并不容易,因为从GC到目标对象(内存泄露对象)的路径不只一条,找出哪条路径引起了内存泄露是非常烦人的工作,大部分情况只能凭借自己的经验。 一般我们都不会关注内存问题,当内存成为问题的时候,程序可能都开发完成了,这时候对象图会引入第三方库、.net 框架、本公司的其他库,需要梳理GC到目标对象的所有路径,并测试每一条路径,确认哪条引起了内存泄露。在测... 阅读全文

posted @ 2011-04-13 23:33 思无邪 阅读(1910) 评论(4) 推荐(1)

Silverlight内存泄露(二)检测内存泄露
摘要:理解GC 理解了GC如果工作,.net程序中的许多奇怪问题都容易理解了。虽然.net一直声称.net程序不需要显式的内存管理,GC会在后台释放不需要的对象,开发者不需要管理对象,但是.net 程序仍然需要关注内存泄露和性能问题。尤其Silverlight、WPF的内存泄露比其他.net程序严重的多。 GC解决了非托管程序中常出现的内存泄露问题,比如开发者忘记释放自己创建的资源。既然GC可以释放内存,为什么还会发生内存泄露呢?原因只有一个,GC与开发者在对象是否生存(”live”)、是否正被使用上有不同的认识。开发者认为对象无用了,可以被GC回收,但GC却认为对象正被使用,内存不会被回收。因此必 阅读全文

posted @ 2011-04-13 17:32 思无邪 阅读(4445) 评论(10) 推荐(3)

从火狐放弃依据特性更新版本说起
摘要:火狐也跟随google的步伐,加快了浏览器版本的升级。在过去一年Chrome以疯狂的速度更新了多个版本,火狐只更新了一个。 火狐放弃依据特性发布版本,是否意味着google的版本发布方式更优秀呢? 未必如此,最初软件功能不完善,存在许多要增加的特性,此时采用特性版本发布方式非常适合,随着新版本的发布,特性列表中存在的特性多是,非关键特性或实现困难的特性。如果到了此时仍然沿用特性版本发布方式就不合时宜了,采用类似google的版本发布方式也是不错的选择。 扩展开来,事物的每个发展阶段都有针对此阶段的最优解决方案,而不存在针对这个事物的最优方案,也更不会存在对每个事物都是最优的方案。软件架构也如. 阅读全文

posted @ 2011-04-13 09:05 思无邪 阅读(1996) 评论(3) 推荐(2)

Silverlight内存泄露(二)解决内存泄露之Dispose误用
摘要:按顺序第二篇应该是”如何检测SIlverlight内存泄露”,但这一系列都是解决实际问题的日志,有些检测结果没有被保存下来,不可能为了写这些文章,而重现bug。想到哪就写到哪了。 看到许多文章在解决事件为被注销引起内存泄露时,通过在Dispose中注销事件,以释放资源,这可能会出现未预料的问题。 Dispose模式介绍 参考:Effective C# - 条款18:实现标准的Dispose模式 要点: 通过实现IDisposable接口,你写成了两件事:第一就是提供了一个机制来及时的释放所有占用的托管资源,另一个就是你提供了一个标准的模式让用户来释放非托管资源。这是十分重要的,当你在你的类型. 阅读全文

posted @ 2011-04-12 16:57 思无邪 阅读(2668) 评论(3) 推荐(3)

Silverlight内存泄露(一)序
摘要:不知道有多少人遇到过Silverlight程序内存狂涨的状况,点击几个按钮、跳转几个页面程序的内存使用量一直上升。 即使最简单的程序,用silverlight模板,创建一个导航程序,跳转几次页面silverlight内存使用也再增加。 托管代码内存由GC回收,在silverlight、wpf出现之前内存泄露出现的比较少,但是silverlight程序却很容易发生内存泄露。 最近一直再处理Silverlight内存泄露问题,但网上相关内容很少,一些经验和大家分享。 托管代码内存泄露原因 GC介绍:NET中GC小记 http://www.cnblogs.com/aaronbao/archive/. 阅读全文

posted @ 2011-04-12 15:45 思无邪 阅读(3401) 评论(5) 推荐(2)

Silverlight IReader阅读器第二版
摘要:下载地址silverlight 阅读器 主要是非功能方面的改进,整个架构做了调整。 a) 采用MVVM架构 b) 使用自定义导航结构 c) 使用MEF d) 用户可以通过配置文件新增解析站点。 e) 使用百度搜索,放弃google(由于经常被墙),下一版本会采用bing api。 功能方面: a) 图书文本文件生成。使用手机的方便了,可以直接生成文本,不必再通过为下载一本小说的文本而费力搜寻。 b) 改进收藏功能,可手动、自动更新收藏的图书,使收藏图书保持最新状态。 c) 本地图书,不再读取在线内容。 d) 改进了搜索功能 e) 新增目录预加载,收藏界面、排行榜界面会预加载目录,此时打开目录. 阅读全文

posted @ 2011-04-07 16:28 思无邪 阅读(1393) 评论(4) 推荐(2)

silverlight阅读器——面向领域的浏览器(二)——Silverlight阅读器架构
摘要:读者最关心的是阅读的内容而不是内容的来源,同一本图,网上有图片版也有文字版本,阅读器可根据用户阅读习惯(比如用户只希望阅读图片章节)自动从网络找到相关图书内容。 阅读器核心价值是提供比浏览器更好的用户体验: 1、 无广告,没弹出窗口 2、 根据用户习惯预加载,阅读无延迟 3、 章节更新通知 4、 统一UI、阅读方便 5、 用户收藏图书保存到开放平台,可以通过开放平台阅读。如:把收藏图书保存到qq空间。 6、 更安全,基于Silverlight,恶意代码在解析器已经被过滤比Html更安全。 以上功能都是浏览器无法提供的。 主要业务流程 阅读器核心的功能是为用户提供方便、友好的阅读方式,以用户阅. 阅读全文

posted @ 2011-04-07 16:23 思无邪 阅读(1752) 评论(8) 推荐(6)

silverlight阅读器——起源面向领域的浏览器——概念
摘要:最近浏览器越来越多,火狐、谷歌、360、百度……,s为什么如此多的公司都要发布自己的浏览器呢?个人认为原因有两点:1. 浏览器离直接面对用户,所有web应用最后都要通过浏览器呈现,从浏览器的屏蔽广告插件可以看出,浏览器可以修改站点内容展现样式,甚至某些浏览器直接在站点中加上自己的广告。2. 浏览器已经不仅仅浏览网页而成为了Web平台,可以在浏览器平台上整合自己的业务,扼杀对手的相同业务。什么是面向领域的浏览器内容+展现形式=用户通过浏览器看到的信息。面向领域的浏览器=聚焦爬虫+Htm解析器+领域业务处理+领域的UI。聚焦爬虫、Htm解析器是基础,可以从网络中找到某一领域的信息。 领域业务处理. 阅读全文

posted @ 2011-04-07 12:49 思无邪 阅读(1770) 评论(3) 推荐(2)

silverlight异步陷阱(二)循环
摘要:由于异步完成事件不能确定,顺序也不能确定,如果把异步操作放到循环内,可能会产生意想不到的结果。 下面的程序本意是:循环items集合,为每个item赋值。 foreach (BookRankItem item in items) { //item只有部分属性有值 //Debug.WriteLine(item.Index);//输出0,1,2,3 EventHandler bookPageHander = (s, e) => { //为item加载数据 BookPage bookPage = service.BookPage; item.LoadFromPage(bookPage); Pa 阅读全文

posted @ 2011-04-07 11:29 思无邪 阅读(554) 评论(1) 推荐(0)

导航