- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
几个月前,我开始自己开发 Silverlight 应用程序。我很快发现我无法为我的大多数控件获得预期的垃圾收集。我用 WinDBG 和 ANTS 内存分析器苦苦挣扎了大约一周,然后在 Silverlight 论坛 (http://forums.silverlight.net/forums/t/171739.aspx) 上发现了“DataTemplate 内存泄漏”链。
鉴于这么多人似乎对各种内存问题感到沮丧,我决定推迟对内存情况的进一步调查,直到最明显的问题得到解决。
无论如何,现在我再次研究这个问题,我意识到我遇到的问题比我最初想象的要根本得多。在以下情况下,我根本没有编写可收集垃圾的 Silverlight 控件的范例:a) 控件具有可以绑定(bind)到的依赖属性,b) 控件可以从一个控件中卸载,然后再次加载。
我开始认为第二个要求太高了。谁能证实这一点?
为了提供更多细节,我能想到的用于编写好的、可垃圾收集的 Silverlight 控件的最强大的模式如下:
1)当应用控件的模板时(在 OnApplyTemplate 覆盖中),我设置了本地属性和 TemplateParts 之间的任何内部绑定(bind)。例如,我可能会在名为 CanSearch 的本地属性和按钮之间设置一个绑定(bind)。
if (x_Button_Search != null)
{
Binding b = new Binding("CanSearch");
b.Source = this;
this.x_Button_Search.SetBinding(Button.IsEnabledProperty, b);
}
if (x_Button_Search != null)
{
this.x_Button_Search.ClearValue(Button.IsEnabledProperty);
}
this.ClearValue(SearchParametersProperty);
var oldTemplate = this.Template;
this.Template = null;
this.Template = oldTemplate;
最佳答案
你在 1) 中所做的事情看起来真的很奇怪。为什么在代码中而不是在 xaml 中启动与模板的绑定(bind)?
我们已经使用这个软件解决了 silverlight 中的许多内存泄漏问题
http://memprofiler.com/
编辑
为了更好地控制绑定(bind),您可以使用
{Binding Property, RelativeSource={RelativeSource TemplatedParent}}
关于silverlight - 是否应该将 Silverlight 控件重新加载到页面上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5127917/
我是一名优秀的程序员,十分优秀!