在矿山的应用程序我有一个性能问题的一个WPF内存泄漏我解决不了:与衍生文本框
这个应用程序是建立与来自TextBox
-class导出输入控件,有自己的ControlTemplate Themes\Generic.xaml
。
我的问题是,这些控件不会被释放后,他们不再使用。如果我使用SciTech MemoryProfiler来查看它们,我会发现它们由System.Windows.Documents.TextEditor
的实例持有,并且TextEditor
-实例通过终结器队列持有。
内存分析器将一个警告附加到TextEditor
- 例程中,称“实例间接根据终结器队列”。
有没有人知道这里发生了什么?不允许直接从TextBox派生?还是我忘记了一些重要的实施?
为实现附加信息:
的一些派生的控件的实现是很简单的。在类构造函数中,DefaultStyleKeyProperty的元数据被覆盖,并且没有事件处理程序附加到控件模板中包含的元素。喜欢的东西:
public class MyDerivedTextBox : TextBox{
static MyDerivedTextBox(){
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyDerivedTextBox), new FrameworkPropertyMetadata(typeof(MyDerivedTextBox)));
}
}
(简化)风格看起来是这样的:
<Style TargetType="{x:Type myApp_controls:MyDerivedTextBox}">
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="UndoLimit" Value="1"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type myApp_controls:MyDerivedTextBox }">
<Border Name="Border" ... >
<ScrollViewer Margin="1" x:Name="PART_ContentHost" />
</Border>
</Setter.Value>
</Setter>
</Style>
+1谢谢你的回答。最后,这是我在另一个位置已经存在的问题:对象属性的DataBindings既未实现INotifiyPropertyChanged也未从DependencyObject派生。在我开始这个项目的时候,我并不知道在大型项目中这会有多糟糕。对于从TextBoxes派生,我现在可以肯定地说,这工作正常。 – HCL