Dav*_*bbo 4 c# webrequest httpwebrequest
我们看到一种奇怪的行为,即在创建新进程之前,缓存中无法使用WebRequest API缓存(在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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我们看到的行为是,对于第二个请求,IsFromCache为false.但是,如果我们第二次运行应用程序,则IsFromCache为true.这意味着事物被正确缓存,但那些刚刚缓存的东西对当前进程不可用,这没什么意义.
任何人都可以解释这种行为,并知道如何修复它,以便缓存的项目可以立即被击中?
你没有丢弃HttpWebResponse和返回的流GetResponseStream().因此它似乎没有完成处理所述请求,并且它得到的数据不能被安全地存储在高速缓存中,因为它可能不是一个完整的实体.当你的过程结束后,将finalisers解决这个问题,所以它会在缓存在下次运行时间.
正确配置您的一次性对象,缓存行为将符合预期.
| 归档时间: |
|
| 查看次数: |
971 次 |
| 最近记录: |