我们看到了一个奇怪的行为,即由于使用webrequestapi而缓存的东西(在IE/wininet缓存中)在创建新进程之前无法从缓存中获得。
考虑以下代码:
using System;
using System.IO;
using System.Net;
using System.Net.Cache;
using System.Threading;
namespace HttpCachingTest {
class Program {
static void Main(string[] args) {
MakeRequest();
Thread.Sleep(1000);
MakeRequest();
}
private static void MakeRequest() {
var request = (HttpWebRequest)WebRequest.Create("http://a0.twimg.com/a/1286210883/images/twitter_logo_header.png");
request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Default);
var response = (HttpWebResponse)request.GetResponse();
Console.WriteLine(String.Format("IsFromCache: {0}, ContentLength: {1}", response.IsFromCache, response.ContentLength));
using (var fileStream = File.OpenWrite("test.jpg")) {
response.GetResponseStream().CopyTo(fileStream);
}
}
}
}
我们看到的行为是,对于第二个请求,IsFromCache为false。但是,如果我们再次运行应用程序,那么IsFromCache是真的。这意味着缓存的内容是正确的,但是那些刚刚缓存的内容对当前进程不可用,这没有什么意义。
有人能解释一下这种行为吗,并知道如何修复它,以便缓存项可以立即被命中?