2

dotMemory次のようなディクショナリにバインドするときにメモリ リークがあることを教えてくれます (以下のスクリーンショット、「WPF バインディング リーク」)。

<ComboBox ItemsSource="{Binding Items, Mode=OneTime}"
          DisplayMemberPath="Value"
          SelectedValue="{Binding SelectedItem}"
          SelectedValuePath="Key" />

質問 1、皆様へ: なぜメモリ リークなのか (つまり、問題が発生した場合はどのシナリオを使用すればよいのか)、どのように修正すればよいのでしょうか?


質問 2、dotMemory の専門家へ: 基本的な mvvm アプリケーション (以下を参照) にこれほど多くの問題が報告されているのはなぜですか? それらの問題を修正する必要がありますか? どのように?


MCVE (新しい WPF ソリューションを作成し、xaml で上記のコードを使用) コード ビハインド:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new ViewModel();
    }
}

public class ViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged([CallerMemberName] string property = "") =>
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));

    public Dictionary<string, string> Items { get; } = new Dictionary<string, string>
    {
        { "1", "One" },
        { "1a", "One and a" },
        { "2a", "Two and a" },
    };

    string _selectedItem = "1a";
    public string SelectedItem
    {
        get { return _selectedItem; }
        set
        {
            _selectedItem = value;
            OnPropertyChanged();
        }
    }
}
4

2 に答える 2