我们正在开发一个WPF桌面应用程序,它显示当前通过HTTP获取的图像.
图像已经针对质量/尺寸进行了优化,但每次获取图像时都会有明显的等待.
有没有办法在客户端缓存图像,以便每次都不下载它们?
jms*_*era 11
我知道这个问题是很老了,但我不得不在WPF应用程序最近使用的缓存,发现有在.net 3.5 BitmapImage的一个更好的选择通过设置UriCachePolicy,将使用系统级高速缓存:
<Image.Source>
<BitmapImage UriCachePolicy="Revalidate"
UriSource="https://farm3.staticflickr.com/2345/2077570455_03891081db.jpg"/>
</Image.Source>
Run Code Online (Sandbox Code Playgroud)
您甚至可以在app.config中设置该值,以使您的所有应用程序都使用默认值进行缓存:
<system.net>
<requestCaching defaultPolicyLevel="CacheIfAvailable"/>
</system.net>
Run Code Online (Sandbox Code Playgroud)
您将在这里找到RequestCacheLevel值的解释:http://msdn.microsoft.com/en-us/library/system.net.cache.requestcachelevel(v=vs.110).aspx
此功能可以理解HTTP/1.1标头,因此如果您设置了Revalidate,它会使用If-Modified-Since标头来避免每次下载,但仍然会检查图像是否已更改,因此您始终拥有正确的图像.
对于通过谷歌来到这里的人,我已经打包了Simon Hartcher发布的原始实现,由Jeroen van Langen重构(以及来自Ivan Leonenko的调整以使其可绑定),成为开源NuGet包.
请在此处查找详细信息 - http://floydpink.github.io/CachedImage/