4

これはばかげているように聞こえるかもしれませんが、画像を読み込む最も効率的な方法はどれですか?

BitmapImage bmp = new BitmapImage();
using(FileStream fileStream = new FileStream(source_path, FileMode.Open))
{
   bmp.BeginInit();
   bmp.CacheOption = BitmapCacheOption.OnLoad;
   bmp.StreamSource = fileStream;
   bmp.EndInit();
   if (bmp.CanFreeze)
      bmp.Freeze();

   images.source = bmp;
}

B

BitmapImage bmp = new BitmapImage();
bmp.BeginInit();
bmp.CacheOption = BitmapCacheOption.OnLoad;
bmp.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
bmp.UriSource = new Uri(source_path);
bmp.EndInit();
if (bmp.CanFreeze)
   bmp.Freeze();

images.Source = bmp;

ストリームからロードするとキャッシュが完全に無効になることをどこかで読んだことを覚えています。それが本当なら、ストリームからロードする方がメモリ管理の点で優れているということですか?

4

1 に答える 1

1

私が理解している限り、UriSourceプロパティを設定して BitmapImage をロードすると、画像は常にキャッシュされます。これを回避する方法がわかりません。少なくとも設定BitmapCreateOptions.IgnoreImageCacheは、画像がキャッシュから取得されないようにするだけで、画像がキャッシュに保存されることを妨げるものではありません。

BitmapCreateOptionsの「備考」には、

IgnoreImageCache が選択されている場合、イメージ キャッシュ内の既存のエントリは、同じ URI を共有していても置き換えられます。

これからの私の結論は、キャッシングはイメージが Uri によってロードされたときにのみ実行されるということです。つまり、本当に画像のキャッシュを禁止する必要がある場合は、そのStreamSourceプロパティで画像をロードする必要があります。

ただし、これが本当に「メモリ管理の観点から優れている」場合は、おそらく実験する価値があります。両方の方法を試して、メモリ消費量に大きな違いがあるかどうかを確認できます。

于 2012-12-11T14:51:34.287 に答える