【问题标题】:Silverlight TreeView using MVVM pattern has large footprint使用 MVVM 模式的 Silverlight TreeView 占用空间大
【发布时间】:2011-06-11 23:43:01
【问题描述】:

我有一个 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 应用程序的一些背景知识:硬件设备(又名:服务器)是专有硬件,具有嵌入式网络服务器,类似于 linksys 路由器。一个压缩的配置文件(模型实体)被加载到设备中,SL 应用程序下载它,解压缩它,并使用 DataContractSerializer 反序列化它。压缩后的文件约为1.75MB,未压缩的约为12.5MB。

我的第一个想法是,由于模型的反序列化,IE 占用空间很大。最初,当 IE 启动时,占用空间约为 7500kb,将模型加载到内存中会运行到 48,000kb。

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

【问题讨论】:

  • 在其他浏览器中的行为如何?
  • 你的节点有一个 image 属性。您的模板是否包含绑定到它的Image 控件?您是否尝试过从模板中消除它?
  • 其他浏览器的行为是一样的..
  • 感谢您的快速回复...我确实注释掉了模板中的 控件,但它似乎没有任何区别。

标签: silverlight memory mvvm treeview footprint


【解决方案1】:

这可能不是您问题的答案,但是: 我不使用标准的 silverlight 控件 + silverlight 工具包控件。我们已经与他们的虫子作斗争了。就他们两个:

  1. 您不能将 datepicker(或 timepicher)放在 childwidow 上,它的样式会失败,您必须在资源中重新声明才能使事情正常进行。

  2. TreeView - 虽然您可以保存 treeview 状态(哪些节点已展开,哪些未展开),但恢复它非常棘手。真的很棘手:在您展开其父节点之前,甚至不会创建节点。

不管怎样,我在说什么?尽快放弃标准控制,强迫你的老板购买 Telerik、Devexpress 或任何你喜欢的东西。 Silverlight 和 wpf 已经是第 4 版了,一些基本的事情不能用开箱即用的控件库来完成,内存仍然泄漏,错误没有得到修复。

【讨论】:

    【解决方案2】:

    我建议使用像 YourKit profiler 之类的分析器,至少可以得到一个关于什么占用内存的内存配置文件。这将有助于找出您的热点在内存消耗方面的情况,并帮助追踪任何内存泄漏。

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

    一定要试用分析器,以更好地了解您的应用的配置文件。

    【讨论】:

    • YourKit 分析器与 Silverlight 完美配合。蚂蚁探查器也可以。
    猜你喜欢
    • 2011-02-23
    • 2023-04-03
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多