.NET では、httpResponse.end()
「現在バッファリングされているすべての出力をクライアントに送信する」状態の説明があります。誰かが私にそれが何を意味するのか説明できますか? 具体的には、「バッファリングされた出力」とは何ですか? httpResponse.end
との交換を依頼されたので質問しHttpContext.Current.ApplicationInstance.CompleteRequest()
ます。これは、ファイルが関係している場合に問題を引き起こしているため、そのフレーズが関係していると推測しています。
3 に答える
情報を出力ストリームに書き込むとすぐにすべての情報を送信するのではなく、時間をかけてクライアントに送信する価値があると見なされる「十分な」データが得られるまで、書き込んだ内容をメモリに保存します。バッファのサイズは、データをバッファリングするコンテキストと理由によって大きく異なります。バッファを「フラッシュする」とは、バッファ内のすべての保留中のデータを処理することです (この場合、処理とはネットワークを介してクライアントにデータを送信することを意味します)。それend
があなたの場合に行っていることです。
バッファリングはさまざまな理由で実行できますが、通常はパフォーマンスの問題です。ストリームに書き込むすべての文字、または (多くの場合) に渡されるすべての文字列に対してネットワーク パケットを送信すると、非常に無駄で時間がかかりますWrite
。アプリケーションは、送信する情報のパケットを減らして大きくすることで、より高速に実行されます。
バッファリングされた出力とは、クライアントに送信する準備ができているが、まだクライアントに送信されていない出力を意味します。
バッファリングされた出力は、プログラムが既に生成した出力ですが、意図した宛先にはまだ転送されていません。
バッファリングは、データを少しずつ送信/書き込みするコストを回避するために、I/O 操作でよく使用されます。書き込み時に出力を宛先に渡すのではなく、システムは「 buffer」を使用し、一定のサイズに達した場合にのみデータを送信/書き込みします。
バッファリングされたデータが宛先に到達する方法は 2 つあります。
- 出力量が特定のしきい値に達する、または
- バッファを明示的に「フラッシュ」するメソッドを呼び出します。
httpResponse.end
はそのような方法の 1 つです。これまでに書き込んだ内容をすべてクライアントに送信して、バッファを空にします。