【发布时间】:2010-05-03 21:52:59
【问题描述】:
我一直在使用 Silverlight 并尝试将我的 Silverlight 3.0 应用程序移植到 Silverlight 4.0。 我的应用程序加载不同的 XAP 文件,并根据用户请求创建 Xaml 用户控件的实例并将其添加到主容器中,以一种 MEF 方法,以便我可以拥有可扩展和可插入的应用程序。
该应用程序非常庞大,为了保持可接受的性能和初始加载,我构建了一些帮助类来在后台加载所有页面和用户控件,以便以后使用。
到目前为止,在 Silverlight 3.0 上,一切运行顺利,没有任何问题。 切换到 SL 4.0 我注意到当流程接近创建用户控件的实例时,布局会意外冻结一分钟,有时甚至更长时间。查看任务管理器,IE 的内存使用量从 50MB 跃升至 400MB,有时甚至高达 1.5 GB。
如果该过程不会占用那么多,即使内存使用量仍然非常高,布局也会正确呈现。否则一切都会因为内存不足异常而崩溃。
运行在 SL3 中编译的相同应用程序,加载所有用户控件时使用的内存约为 200MB。在 SL3 中加载应用程序所花费的时间大约为 10 秒,而在 SL4 中最多需要 3 分钟。布局中没有透明度,没有设置不透明度,也没有效果和动画。
当用户从一个屏幕切换到另一个屏幕时,用户控件会即时实例化并有意在可视化树中添加或删除。当从可视化树中移除用户控件以允许 GC 在后台运行时,所有资源都会被正确清理。
我可能做错了什么,但我无法弄清楚这个问题的根源到底在哪里。据我所知,SL4 中没有内存分析器可以帮助我找到查看的位置。但同样,我无法更新可用的新调试工具。
【问题讨论】:
标签: silverlight silverlight-4.0 memory-management