【发布时间】:2011-07-19 17:52:35
【问题描述】:
我正在开发一个 Silverlight 4 项目,在该项目中出现内存泄漏,因为每次加载某些 xaml 视图时,它们都会创建自己的类实例,然后与事件触发器挂钩,并且不会收集垃圾。在这种情况下,删除事件侦听器对我来说太棘手了,无法以这种方式处理。因此,我希望每次加载 xaml 视图时都重新使用该类的实例。
为此,我计划为每个发生此错误的项目添加资源字典。但我担心的是我不知道何时创建此资源字典。当解决方案首次加载时,它会加载项目然后加载资源字典,立即创建类以供使用吗?或者它会等到有东西要求它然后创建它。实际发生的情况是否会创建一个类的副本,供访问它的每个人重复使用(而不是另一个副本)?
我也意识到我可以将资源放在 app.xaml 中,但我需要添加许多这样的类,它确实会弄乱不应该被这个问题困扰的区域。
【问题讨论】:
-
您是否担心避免分配多个资源字典?
-
我担心我有一个相当大的项目传递给我,我想保持清洁。在 app.xaml 资源字典中添加大约 16 个元素,这些元素只在一个地方使用,这看起来很脏,如果有人需要找出它们是什么,他们不会先看那里。我知道如何完成任务,我只想将相关数据分组并防止在整个解决方案中分散我需要的东西。不过我一直在阅读,可能只是实现了一个合并字典以使其保持排序。
-
好吧,如果您在多个地方使用它,除非您采取措施阻止它,否则将分配单独的副本。这就是我问的原因。
-
资源字典的单独副本还是自定义类的单独副本? MSDN 让我相信资源字典中使用的自定义类将被重用。我认为这意味着类的实际实例将被重用。我打算继续使用 app.xaml 文件实现一个合并字典,除非有人有一个更干净的实现供我使用。并且只需在一个资源字典文件中定义这些类似事物的所有资源。
-
好的,我已经根据这个讨论发布了答案。
标签: c# silverlight xaml resourcedictionary