使用MVVM模式的Silverlight TreeView占用空间很大

时间:2011-01-19 19:02:32

标签: silverlight memory mvvm treeview footprint

我有一个Silverlight TreeView,其中每个节点都是TreeNodeViewModel。 TreeNodeViewModel上的属性是Text,IsSelected,ImageUri和Parent。我正在加载大约700到1000个TreeView项目。

似乎正在发生的事情是,通过HierarchicalDataTemplate中的绑定加载TreeView后,IE浏览器的占用空间从大约48,000kb增加到165,000kb。我正在为TreeView本身使用ViewModel,它具有ExpandAll和CollapseAll的绑定。当我调用expand命令时,IE足迹继续增长到近300,000kb。树完全展开后,重复展开&崩溃不会增加足迹;也就是说,一旦创建了所有ViewModel,它似乎就会趋于平稳。

我的问题是,如果我正在加载大约800个TreeView项目,那么它的占用空间是否应该与我的情况一样大?有没有人看到IE加载大量数据的过度占用空间?

我正在开发的SL应用程序的一些背景:硬件设备(又名:服务器)是专有硬件,并且具有嵌入式Web服务器,类似于linksys路由器。将压缩的配置文件(模型实体)加载到设备,SL应用程序将其下载,解压缩并使用DataContractSerializer对其进行反序列化。压缩的文件大约是1.75MB,未压缩的大约是12.5MB。

我首先想到的是,由于模型的反序列化,IE足迹很大。最初,当IE启动时,占用空间约为7500kb,将模型加载到内存中可运行高达48,000kb。

任何想法或建议都将不胜感激。

2 个答案:

答案 0 :(得分:0)

可能这不是你问题的答案,但是: 我不使用标准的silverlight控件+ silverlight工具包控件。我们已经在努力克服他们的错误了。只是其中两个:

  1. 你不能把datepicker(或timepicher)放在childwidow上,它的样式会失败,你必须在你的资源中重新声明才能让事情顺利进行。

  2. TreeView - 虽然您可以保存树视图状态(哪些节点已展开但哪些节点未展开),但恢复它非常棘手。非常棘手:在扩展父母之前,甚至都没有创建节点。

  3. 无论如何,我在说什么?尽快放弃标准控制,迫使老板购买Telerik,Devexpress或任何你喜欢的东西。它已经是Silverlight和wpf的第四个版本,并且一些基本的东西不能通过开箱即用的控件库来完成,内存仍然会泄漏,错误也无法修复。

答案 1 :(得分:-1)

我建议使用像YourKit profiler之类的探查器来至少获取占用内存的内存配置文件。它将有助于找出您的热点在内存消耗方面的含义,并帮助追踪任何内存泄漏。

165MB太多了?你可以强制GC.Collect,以防这个内存使用不会给GC带来太大的压力,所以可能主要是垃圾?

绝对试用分析器以更好地了解应用的个人资料。