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;
}

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 回答