即使像这样使用
一旦调用了SendAsync,HttpClient就会发出一个GET请求。这可以在Fiddler中看到。
在底层,底层的HttpClient实际上将请求响应存储在哪里?它是存储在内存中吗?如果是存储在内存中,如果响应非常大,那岂不是会有问题?在我的测试中,似乎并不是存储在内存中。 它可能存储在非用户内存中,比如内核内存中吗?我对网络下载数据时内部工作原理不太熟悉。
请注意,我并不是在询问通过调用response.Content.ReadAsStringAsync()来消耗响应内容。我想知道的是,在我开始通过调用response.Content.ReadAsStringAsync()之类的方法来消耗响应之前,HttpClient是如何读取和存储响应的。
HttpCompletionOption.ResponseHeadersRead
:var httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("https://myserver.com");
var request = new HttpRequestMessage(HttpMethod.Get, "huge_file.bin");
var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
一旦调用了SendAsync,HttpClient就会发出一个GET请求。这可以在Fiddler中看到。
在底层,底层的HttpClient实际上将请求响应存储在哪里?它是存储在内存中吗?如果是存储在内存中,如果响应非常大,那岂不是会有问题?在我的测试中,似乎并不是存储在内存中。 它可能存储在非用户内存中,比如内核内存中吗?我对网络下载数据时内部工作原理不太熟悉。
请注意,我并不是在询问通过调用response.Content.ReadAsStringAsync()来消耗响应内容。我想知道的是,在我开始通过调用response.Content.ReadAsStringAsync()之类的方法来消耗响应之前,HttpClient是如何读取和存储响应的。
ReadAs...
,服务器尚未发送响应。 - CharliefaceReadAsStream
并实际从流中读取字节之前,响应流并没有完全被读取。 - Charlieface