2016-11-22 3 views
0

HttpWebRequest.GetResponse().GetResponseStream()からのストリームを使用して、ストリーミングWeb APIからデータを読み取っています。私は、ストリームに65Kバイトのバッファを持つBegin/EndReadを使用します。HttpWebResponse不均一なチャンクでストリームを読み取る

16383 bytes read. 
1 bytes read. 
16383 bytes read. 
1 bytes read. 
16383 bytes read. 
1 bytes read. 
etc... 

は明らかに1つのバイトは、プロセスの非効率をたくさん紹介読み込み、私が提供するバッファサイズは16384バイト以上にフィットするのに十分な大きさである:私は、データが次のパターンで返されていることがわかります。これを改善するためのクライアントとして何かできることはありますか、それとも単にデータをサーバーに送信するのですか?

リーダーコードは基本的に:

var buffer = new byte[65536]; 
using (var stream = response.GetResponseStream()) { 
    while (true) { 
     var bytesRead = await AsyncRead(stream.BeginRead, stream.EndRead, buffer); 
     Console.WriteLine($"{bytesRead} bytes read."); 
     // do something with the bytes 
    } 
} 

AsyncReadメソッドは、コールバックだけでEndRead次いで、BeginRead(buffer, 0, buffer.Length, callback, null)を呼び出し、EndReadの戻り値を返す場合。

これは.NET 4.0で、HttpClientはありません。

+0

http接続が開いたままで、データ転送がおそらくそのバイトを読み取るためのCPUオーバーヘッドよりもずっと遅いので、1バイトが効率を大幅に低下させるかどうかはわかりません。それにもかかわらず、それは奇妙な行動です。あなたは読者コードの関連部分を投稿できますか? – Stefan

+0

@Stefan、確かに、それは実際には別の非同期実装を使用するFですが、私は翻訳しました。非同期コードには何も特別なことはありませんが、パラメータと戻り値をそのまま渡すだけです。 – Asik

+2

野生の推測:圧縮または暗号化が原因です。 'HttpWebRequest'で圧縮をオフ(またはオン)にしてみてください。同様に、動作が 'http'対' https'接続で同じかどうかを見てください。私はTLSが2^14バイトサイズのチャンク(すなわち16384バイト)でデータを送信すると信じています。 –

答えて

-1

HTTPWebRequestをターゲットサーバに送信して、正確に何を達成しようとしていますか?

サーバーに対してクライアントアプリケーションとターゲットサーバーの間でデータの要求または初期化要求を行った後、ライブ応答をサーバーから読み取ろうとしていますか? HTTPWepRequestとHTTPWebResponseをターゲットサーバに送信しようとすると、サーバから与えられたレスポンスをストリームに変換し、System.IO.StreamReaderを使用してストリームを読み込みます。

次に、System.IO.StreamReaderメソッドで読み取られたストリームをUTF-8に変換してください。

UTF-8に変換した後、出力ストリームを文字列値に出力することができます。これをコンソールに出力したり、出力文字列を送信したい場所に出力したりできます。

私が本質的に役に立たなかったなら、これがあなたが望むものであることを望みます。 :P

+0

StreamReaderを介した読書は、私の問題にどのように役立つと思われますか? "HTTPWebRequestをターゲットサーバに送信して、正確に何を達成しようとしていますか?" - 記述されているように、ストリーミングWeb APIからデータを取得する。 – Asik

+0

あなたがサーバーから送信されたデータを読み込もうとしたら、それをやりたければ、必要な場合に備えてオプションを提示しました! – WinMister332

+0

私はサーバーからデータを読み込んでいます。私はあなたが質問を理解していないのが残念ですが、とにかく感謝します。 – Asik

関連する問題