Вопрос о потоках и http запрос / ответ - PullRequest
0 голосов
/ 18 октября 2010

При использовании потоков потребление памяти должно быть таким же, как размер буфера. Тем не менее, я не уверен, как работает поток, когда я смотрю на следующий код, который использует 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 (). Затем, как (или где) данные управляются потоком до выполнения последней строки?

1 Ответ

2 голосов
/ 18 октября 2010

Я считаю, что это зависит от значения HttpWebRequest.AllowWriteBufferStreaming. Если это свойство имеет значение true (что по умолчанию), все данные запроса буферизуются до тех пор, пока вы не запросите ответ.

Если значение равно false, данные могут быть записаны в соединение по мере их записи в поток.

Обратите внимание, что в любом случае было бы неплохо утилизировать поток как обычно:

using (Stream requestStream = webRequest.GetRequestStream())
{
    requestStream.Write(buffer, 0, buffer.Length);
}

Вы также должны использовать оператор using для ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...