(.net)HttpListenerで、ContentLength64をセットしないと遅い

.netで、HttpListenerを使う場合ですが、HttpListenerクラスのドキュメントをみるとこんな感じ。

response.ContentLength64 = buffer.Length;
System.IO.Stream output = response.OutputStream;
output.Write(buffer,0,buffer.Length);
output.Close();

最後のデータを渡す部分ですね。この通り書けば、特に問題なく動作します。
実は、ContentLength64はセットしなくても動くため、私は書き忘れていた場合があったのですが、この時に動作が遅くなるという罠があるみたいです。
AWSを使用して、Httpの通信速度を、HttpClient,HttpListenerを使って確認していたのですが、ContentLength64をセットしない場合、46ミリ秒ほど遅くなる場合がありました。
(ContentLength64をセットした場合、30マイクロ秒程度でした)
見たところ、Windowsでは、少し遅くなるものの、そこまでの遅延は起こらず、Linuxの場合にこの様な遅延が見られました。

動作しなくなるわけではなく、遅くなるだけなので、問題が表面化しにくいので、注意が必要です。

投稿日:
カテゴリー: C#

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です