bugfix> c# > 投稿

内部ストレージから画像をロードしたい場合、時々それが遅れますが、時々OutOfMemmoryExceptionが発生します。

var picList = System.Instance.GetFiles("/storage/emulated/0/DCIM/Camera", true); //Its a string list, include the files name

                var inc = 0;
                foreach (var item in picList)
                {
                    var byteArray = FileSystem.Instance.ReadFile("/storage/emulated/0/DCIM/Camera", item.Split('/').Last(), true);
                    var toPicture = ImageSource.FromStream(() => new MemoryStream(byteArray));
                    var image = new Image
                    {
                        ClassId = inc.ToString(),
                        Source = toPicture,
                        WidthRequest = 200,
                        HeightRequest = 200,
                    };
    `        }
    }

私はそれを処分する必要があると思うが、私は方法がわからない。

回答 2 件
  • ほとんどの場合、 image.Dispose() を呼び出すことはありません  イメージに割り当てられたメモリが決して解放されないようにイメージインスタンスのメソッド。また、すべてのファイルをロードするのではなく、オンデマンドでロードすることを検討する必要があります。

  • 繰り返しごとに新しい変数を宣言するのではなく、ループ外で変数を宣言して再利用する必要があると思います:

    byte[] byteArray = null;
    MemoryStream toPicture = null;
    Image image = null;  
    foreach (var item in picList)
    {
        byteArray = FileSystem.Instance.ReadFile("/storage/emulated/0/DCIM/Camera", item.Split('/').Last(), true);
        toPicture = ImageSource.FromStream(() => new MemoryStream(byteArray));
        image = new Image
        {
            ClassId = inc.ToString(),
            Source = toPicture,
            WidthRequest = 200,
            HeightRequest = 200,
        };
    }
    
    

あなたの答え