dinghao

记录成长点滴

 

2011年4月18日

Silverlight内存泄露(八)样式

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

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

2011年4月17日

Silverlight内存泄露(七)Command

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

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

2011年4月15日

Silverlight内存泄露(六)MEF等Ioc框架引起内存泄露-ExportLifetimeContext

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

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

2011年4月14日

Silverlight内存泄露(五)MEF等Ioc框架引起内存泄露-PartCreationPolicy

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

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

2011年4月13日

Silverlight内存泄露(四)解决内存泄露

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

posted @ 2011-04-13 23:33 思无邪 阅读(1905) 评论(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 思无邪 阅读(4406) 评论(10) 推荐(3) 编辑

从火狐放弃依据特性更新版本说起

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

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

2011年4月12日

Silverlight内存泄露(二)解决内存泄露之Dispose误用

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

posted @ 2011-04-12 16:57 思无邪 阅读(2654) 评论(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 思无邪 阅读(3381) 评论(5) 推荐(2) 编辑

2011年4月7日

Silverlight IReader阅读器第二版

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

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

silverlight阅读器——面向领域的浏览器(二)——Silverlight阅读器架构

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

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

silverlight阅读器——起源面向领域的浏览器——概念

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

posted @ 2011-04-07 12:49 思无邪 阅读(1756) 评论(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 思无邪 阅读(547) 评论(1) 推荐(0) 编辑

2011年2月16日

silverlight 异步陷阱(一)不能Remove事件处理程序

摘要: Silverlight中许多操作都要去异步完成,但有时候会碰到多个异步操作需要按照一定顺序完成,事件是把异步操作转换成同步操作的一种方法。 lambda是操作事件的简洁方式,事件、lambda、同步组合在一起,就会产生事件处理程序不能移除的状况。看下面的代码:代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->publicvoidLoadChapter(stringuri){//两个异步操作需要协调EventHandlerhandler=(s 阅读全文

posted @ 2011-02-16 13:59 思无邪 阅读(1660) 评论(1) 推荐(2) 编辑

2010年12月20日

IReader Silverlight电子阅读器介绍开源项目

摘要: 旧版本地址:http://htmlextractor.codeplex.com/ 新版本架构没有稳定,暂时还没有放上。如果有兴趣可以留言。 演示地址: 演示地址1 演示地址2 部署在一个免费php空间,不知道什么原因,不能自动更新。因此有新版本时,必须先删除再重新安装。 演示也需要silverlight运行时支持,如果本地没有安装,请先下载silverlight: 天空软件站微软官方下载地址 下载: 只有800多k,下载完以后,点击default.html,运行需要silverlight4,如果本地没有,必须先安装。 阅读器下载地址:阅读器 silverlight下载地址: 天空软件站微软官方 阅读全文

posted @ 2010-12-20 20:42 思无邪 阅读(1596) 评论(3) 推荐(4) 编辑

2010年7月6日

silverlight在线阅读器(二):为silverlight增加gb2312编码

摘要: 阅读器遇到的第一问题就是中文编码,许多网站都使用中文编码,而silverlight并不支持,这是首先要解决的问题。 .NET Compact Framework同样也不支持GB2312编码,这个解决方法同样适用于.NET Compact Framework。 方法其实很简单,通过GB2312与unicode的对照表。首先把取得字节码,再转行到Unicode码,最后查表取得对应汉字,接下来就是实现的问题了。 首先定义转换字典:字典信息可以从 转换字典 获得。 第二步实现Encoding类,命名为:Gb2312Encoding,代码如下: 代码Code highlighting produced. 阅读全文

posted @ 2010-07-06 23:15 思无邪 阅读(1727) 评论(4) 推荐(1) 编辑

silverlight在线阅读器(一):介绍

摘要: 在线图书阅读器 特点:1、基于Silverlight4,必须运行在OOB模式,第一次运行点击安装按钮。2、流量小。只下载网页中有用的内容,网页中的css、js、视频、图片等无关内容都不会下载,流量非常小。3、章节预读取,读起来没有延迟,在线阅读与本地阅读一样流畅。(内容简介、目录并不会预读取,默认预读取3章)4、键盘快捷键。可以通过键盘翻页、滚屏。5、内存使用率低。预读取的内容都保存在本地缓存,加载图书多了内存使用率也不会增加。6、搜索图书功能。7、图书收藏 8、图书下载,图书可以下载到本地,下载速度非常快。9、可以读取本地图书10、开源阅读器程序界面借用了微软silverlight cont 阅读全文

posted @ 2010-07-06 21:44 思无邪 阅读(1524) 评论(2) 推荐(1) 编辑

2007年9月11日

新建立一个类似于CuteEditor的项目,希望有人参加。发布一个测试版本的dll

摘要: 决定完成一个开源项目,暂时命名为WordEditor。分三步完成,第一步以某个现有的Editor为蓝本,完成一个类似的实现。目前,参考Cuteeditor的一个实现已经完成,大概有CE百分之八十以上的功能。之所以仿照CE,一是因为他的界面最酷,二是因为它的源代码用了混淆,做类似的实现比较有意思。不过,现在想来选择CE做蓝本是一个错误。因为除了界面比较酷之外,他的服务器端代码很烂,一方面为了达到更好... 阅读全文

posted @ 2007-09-11 17:50 思无邪 阅读(2814) 评论(14) 推荐(0) 编辑

2007年9月6日

从控件开发的角度看几个editor控件,Freetextbox,radtoolbar,abouteditor,cuteeditor

摘要: 今天控件的开发有了很大进展,写些东西。在开发之前,我看了几个控件的源代码,如Freetextbox,radtoolbr,abouteditor以及cuteeditor。今天凭会议总结一下他们的特点,能记下来的都是他们很独特的地方。首先是FreeTextbox此控件是生成的控件(相对于复合控件),不论是toolbar还是toolbaritem,都不是以子控件的形式存在,因此有更好的性能。这种方式的缺... 阅读全文

posted @ 2007-09-06 23:49 思无邪 阅读(3707) 评论(8) 推荐(0) 编辑

想做一个关于word解析和HtmlEditor的项目,希望有人加入

摘要: 从解析WordprocessingML开始,就想写一个基于xml的类库,我总觉得MS以xml描述Office文档,是一个机会。但是这个类库,应用范围比较窄,我对他的前途有些怀疑。我希望,这个类库配合一个基于html的编辑器,这个编辑器和流行的一些Editor的不同之处是,它能更好的和word格式之间互操作。如,对html的修改可以反映到word上。 编辑器项目 由于我对Javascript了解很少... 阅读全文

posted @ 2007-09-06 23:49 思无邪 阅读(3607) 评论(12) 推荐(0) 编辑

导航