1

大量の画像セット (600+、平均サイズ 190Kb) 間で (高速に) スワップする WPF アプリを作成しましたが、いくつかの問題が見つかりました。

    private int appendImages(Canvas c, int start, int end)
    {
        int tot = 0;
        for (int i = start; i < end; i++)
        {
            BitmapImage bi = new BitmapImage();
            bi.BeginInit();
            //bi.CacheOption = BitmapCacheOption.OnLoad;
            bi.UriSource = new Uri(appFolder+@"/"+imgFolder+"/"+filename(i)+".jpg");
            bi.EndInit();

            Image img = new Image
            {
                Width = imgWidth,
                Height = imgHeight,
                Source = bi,
                Name = name(i),
                Visibility = i == startImg ? Visibility.Visible : Visibility.Hidden
            };

            c.Children.Add(img);
            tot++;
        }
   }

どうやら初期化は問題ありませんが、次のように画像を交換しようとすると:

    private void changeImageTo(int n)
    {
        Image img = findImage(n);
        Image old = findImage(prevImg);
        if (img != null)
        {
            img.Visibility = Visibility.Visible;
            if (old != null && old != img)
                old.Visibility = Visibility.Hidden;

            prevImg = n;
        }
    }

..次に、アプリは最初の 200/300 画像を表示し (使用するソースによって異なります)、残りは空/空白です (下にキャンバスが表示されます)。

メモリの問題だと思いますが、何が原因なのかよくわかりません。

ところで、コメント行 (BitmapCacheOption.OnLoad) のコメントを外すと、アプリの起動時に vshost エラーが発生することがあります。

ブラウジングに役立つものは何も見つからなかったので、どんな助けも大歓迎です。前もって感謝します!

4

1 に答える 1