MemoryLeak с конвертером
При использовании преобразователя в качестве статического ресурса в пользовательском элементе управления утечка памяти происходит даже при закрытии окна.
Образец прилагается и, пожалуйста, найдите скриншот ниже.
Можете ли вы предложить какое-либо решение для этого?
Примечание: я проверил это в профиле ANTS.
Пример кода для создания настраиваемого элемента управления. Этот элемент управления используется в простом примере.
Шаги репликации утечки памяти с описанием образца:
Используйте созданный пользовательский элемент управления в простом примере.
До и после закрытия окна (в каком окне есть созданный пользовательский элемент управления) проверьте утечку памяти в профиле ANTS.
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:customcontrol">
<local:YesNoToBooleanConverter x:Key="YesNoToBooleanConverter"/>
<Style TargetType="{x:Type local:CustomControl1}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomControl1}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<StackPanel Orientation="Horizontal">
<TextBox Name="txtValue" Height="50" Width="100" />
<CheckBox IsChecked="{Binding ElementName=txtValue,
Path=Text,
Converter={StaticResource YesNoToBooleanConverter}}" />
</StackPanel>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
public class CustomControl1 : Control
{
static CustomControl1()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));
}
}
public class YesNoToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
switch (value.ToString().ToLower())
{
case "yes":
return true;
case "no":
return false;
default:
return Binding.DoNothing;
}
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
if (value is bool)
{
if ((bool)value == true)
return "yes";
else
return "no";
}
return "no";
}
}
С уважением, Приянга Б