同様の問題または同様の問題を経験している人を見つけるのに苦労しています。
私は現在、GZip 要件がある http (json) 経由のストリームを消費しています。データが送信されてからreader.ReadLine()
読み取られるまでに遅延が発生しています。これは、バッファにデータを保持するデコードに関連している可能性があることが示唆されていますか?
これは私が現在持っているもので、遅延を除けば問題なく動作します。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endPoint);
request.Method = "GET";
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential(username, password);
request.AutomaticDecompression = DecompressionMethods.GZip;
request.ContentType = "application/json";
request.Accept = "application/json";
request.Timeout = 30;
request.BeginGetResponse(AsyncCallback, request);
次に、 AsyncCallback メソッド内に次のものがあります。
HttpWebRequest request = result.AsyncState as HttpWebRequest;
using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result))
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
if (string.IsNullOrWhiteSpace(line)) continue;
Console.WriteLine(line);
}
}
reader.Readline()
より多くのデータが受信されるまで待機し、その一部を保留します。キープアライブ改行も受信されます。これらは、何かを読み取ることを決定したときに一度に読み取られることがよくあります。
curl コマンドを実行してストリームを並行して実行することをテストしました。curl コマンドはデータを完全に正常に受信して解凍します。
どんな洞察も素晴らしいでしょう。ありがとう、
ダン
編集 streamreader でバッファ サイズを使用してもうまくいきませんでした。
new StreamReader(stream, Encoding.UTF8, true, 1)
EDIT また、.NET 4.5に更新して使用することもできませんでした
request.AllowReadStreamBuffering = false;