Skip to content

ナビゲーション遷移時の参照保持によるメモリ リーク #27

@jaizawa758

Description

@jaizawa758

バージョン:Kamishibai.Hosting 3.0.1

ViewModelで大きなオブジェクトを扱う場面があり、画面遷移後には使用されたメモリはGCに回収してもらいたい。
現状は画面遷移時にNavigationStackクラスに参照を保持しているためにメモリーリークがおこるようです。

再現手順
https://zenn.dev/nuits_jp/books/introduction-to-kamishibai/viewer/02-getting-started
上記のページまで作成、FirstViewModelを次のように改修する

using Kamishibai;
using System.Collections.ObjectModel;

namespace GettingStarted;

[Navigate]
public class FirstViewModel : IPausingAware
{
    public FirstViewModel(string message)
    {
        Message = message;
        Items.Add(new ChonkyClass()); // 大きなオブジェクトの例
    }

    public string Message { get; }

    public ObservableCollection<ChonkyClass> Items { get; private set; } = new(); 

    public void OnPausing(PreForwardEventArgs args)
    {
        Items.Clear();
    }
}

public class ChonkyClass
{
    public int[] Array;

    public ChonkyClass()
    {
        Array = new int[100000000];
    }

    public int Id => GetHashCode();
}

プログラムを実行しNavigateボタンを何度も押下する
タスクマネージャーでメモリ使用量を観察する

起動直後
2024-11-12_14h16_06

Navigateボタンを何度か押下後
2024-11-12_14h16_31

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions