使用流时,内存消耗应该与缓冲区的大小相同。但是,当我查看以下使用http请求和响应的代码时,我不确定流是如何工作的。 (准确地说是HttpWebRequest)
Stream requestStream = webRequest.GetRequestStream();
// Here write stuff to the stream, data is a string.
webRequest.ContentLength = data.Length;
byte[] buffer = Encoding.UTF8.GetBytes(data);
// Obtain request stream from request object so I can send data.
requestStream = webRequest.GetRequestStream();
requestStream.Write(buffer, 0, buffer.Length);
WebResponse response = webRequest.GetResponse();
我可以继续写一个requestStream,比如说在一个循环中,而不是只写一个字符串,但是在调用webRequest.GetResponse()之前,它们都不会到达目标服务器。 那么,在执行最后一行之前,流管理的数据是如何(或在哪里)的呢?
答案 0 :(得分:2)
我认为这取决于HttpWebRequest.AllowWriteBufferStreaming
的价值。如果此属性为true(默认情况下为此属性),请求数据将全部缓冲,直到您要求响应为止。
如果为false,则可以在将数据写入流时将数据写入连接。
请注意,在任何一种情况下,最好按正常方式处理流:
using (Stream requestStream = webRequest.GetRequestStream())
{
requestStream.Write(buffer, 0, buffer.Length);
}
您还应该使用using
语句进行回复。