在礦山的應用程序我有一個性能問題的一個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