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

使用MVVM模式的Silverlight TreeView占用空间很大,silverlight,memory,mvvm,treeview,footprint,Silverlight,Memory,Mvvm,Treeview,Footprint,我有一个Silverlight树视图,其中每个节点都是一个TreeNode模型。TreeNodeDevice模型上的属性为、Text、IsSelected、ImageUri和Parent。我正在加载大约700到1000个TreeView项目 似乎正在发生的是,通过HierarchycalDataTemplate中的绑定加载TreeView后,IE浏览器的内存从大约48000KB增加到165000KB。我正在为TreeView本身使用ViewModel,它具有ExpandAll和CollapseA

我有一个Silverlight树视图,其中每个节点都是一个TreeNode模型。TreeNodeDevice模型上的属性为、Text、IsSelected、ImageUri和Parent。我正在加载大约700到1000个TreeView项目

似乎正在发生的是,通过HierarchycalDataTemplate中的绑定加载TreeView后,IE浏览器的内存从大约48000KB增加到165000KB。我正在为TreeView本身使用ViewModel,它具有ExpandAll和CollapseAll的绑定。当我envoke expand命令时,IE内存将继续增长到近30000KB。一旦树完全展开,重复展开和折叠不会增加足迹;也就是说,一旦创建了所有ViewModel,它似乎就趋于平稳

我的问题是,如果我加载了大约800个TreeView项目,那么是否期望占用空间与我的情况一样大?有没有人见过IE因加载大量数据而占用的空间过大

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

我的第一个想法是,由于模型的反序列化,IE的足迹很大。最初IE启动时,占用空间约为75000KB,将模型加载到内存中可运行48000KB


如果您有任何想法或建议,我们将不胜感激。

我建议您使用YourKit profiler之类的档案器,至少可以获取占用内存的内容的内存档案。它将有助于找出内存消耗方面的热点,并有助于跟踪任何内存泄漏

165MB太多了吗?你可以强制GC.Collect,以防这种内存使用不会对GC造成太大的压力,因此大部分可能是垃圾吗


一定要试用档案器,以便更好地了解应用程序的档案。

这可能不是对您问题的回答,但: 我不使用标准silverlight控件+silverlight工具箱控件。我们已经和他们的虫子斗争够了。只有他们两个:

您不能将datepickeror timepicher放在childwidow上,它的样式将失败,您必须在资源中重新声明才能正常工作

TreeView-虽然您可以保存TreeView状态,其中哪些节点已展开,哪些未展开,但恢复它相当棘手。非常棘手的是:在展开节点的父节点之前,甚至都不会创建节点


不管怎样,我在说什么?尽快放弃标准控制,强迫你的老板购买Telerik、DevXpress或任何你喜欢的东西。它已经是silverlight和wpf的第四个版本,一些基本的事情无法使用开箱即用的控制库完成,内存仍然泄漏,bug无法修复。

其他浏览器中的行为如何?您的节点具有图像属性。您的模板是否包含绑定到该模板的图像控件?你试过从模板中删除它吗?在其他浏览器中的行为是相同的。谢谢你的快速回复。。。我确实在模板中注释掉了该控件,但似乎没有什么不同。YourKit profiler与Silverlight配合得非常好。蚂蚁档案也有。