一个有意思的.net应用bug
来源:互联网 发布:掘金量化 知乎 编辑:程序博客网 时间:2024/04/29 13:44
2012-12-04
有一个比较有意思的.net应用的bug。涉及到了.net的几个重要概念。
这是一个wpf的应用,使用了第三方的ribbon控件。
现象是这样的,一个window关闭之后,相同类型的window被再次打开;此时,window对应的contextual ribbon中行为只跟当前active的window的数据无关联。当前window的改变与contextual ribbon变动没有关系了。
调试后的第一发现是,哪怕所有window被关闭(对应的contextual ribbon也不见了),但contextual ribbon中的command一直被执行,而且用的数据都来自第一个window。也就是说,ribbon常驻内存,使用后就被cache了。因为ribbon 会refer到window,被关闭的同类window中的第一个,实际一直没有被GC delete,不然就报null reference异常了。
实际上也是,app会一直refer到ribbon,直到app退出,不然ribbon不会被delete。
所以,我们的目标就是ribbon应该用当前active的window。每个window被关掉后,不应该再用了。
我们发现ribbon会refer到window的地方是这样的
Func(() =>{…},
Presenter.CanShowInfo() // !!!here!!!
);
这样的话,window会被直接refer到而不会被delete。我们的改法是
Func(() =>{…},
() => {Presenter.CanShowInfo() ;}// !!!here!!!
);
因为lambda表达式的lazy特性,它不会refer某一个window的object,而是在用的时候才会去找,所以能找到当前active的window。
Over~
- 一个有意思的.net应用bug
- 一个有意思的bug
- 一个很有意思的Bug-
- php一个有意思的bug
- 从一个微软的有意思的bug想到的
- [转]从一个微软的有意思的bug想到的
- 记一个比较有意思的bug,position绝对定位问题
- VC.net的一个bug?
- 一个 VS.Net 的 Bug
- VC.NET的一个BUG
- .net库的一个bug?
- Spring.net 的一个bug ?
- 推荐:有意思的应用
- 搞搞有意思的应用
- 偶然间碰到了一个vc的一个bug,太有意思了
- 有意思的一个算法。
- 一个有意思的思考题
- ------一个有意思的题目-----------
- 受塑化剂风波影响茅台价格大跳水
- jhat分析内存
- 编写Linux/Unix守护进程
- SWF文件自适应浏览器以及控制SWF的最小宽度和高度
- SQL Server优化50法
- 一个有意思的.net应用bug
- 【火星备份软件】多样化备份方式
- 用css为html元素添加圆角效果
- 如何使用GNU编译器GCC来编译Cortex-M3?GCC + STM32
- 程序员成熟的标志
- 中央一号文件或连续十年聚焦农业
- Java实现汉字转拼音
- ios 模拟器路径
- oralce RAC 归档日志的方式及RMAN备份方法