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";
    }
}

С уважением, Приянга Б

0 ответов

Другие вопросы по тегам