0

我有一个 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。

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

4

2 回答 2

0

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

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

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

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

于 2011-01-20T09:08:37.513 回答
-1

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

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

一定要尝试使用分析器来更好地了解您的应用程序的配置文件。

于 2011-01-20T08:36:03.057 回答