2

SharePointからファイルをダウンロードしようとしています。調べてみたところ、これがわかりましたが、バッファを使うとパフォーマンスが良くなるとのことです。

備考-ファイルはSPFileです

using (System.IO.Stream strm = file.OpenBinaryStream())
{
    byte[] buffer = new byte[BUFFER_SIZE];
    int bytesRead;
    do
    {
        bytesRead = strm.Read(buffer, 0, BUFFER_SIZE);
        response.OutputStream.Write(buffer, 0, bytesRead);
        response.Flush();
    } while (bytesRead > 0);
} 

のように割り当てるとresponse.BinaryWrite(file.OpenBinary());、ストリーム全体がstrmオブジェクトに格納されますか(RAMの消費を開始します)?ファイルが10MBであるとすると、このstrmはRAMで10 MBになりますか?

または、読み取りを開始するとメモリを消費し始めますか?bytesRead = strm.Read(buffer, 0, BUFFER_SIZE);

4

1 に答える 1

3

AStreamはパイプであり、バケットではありません。(通常は)データを「含む」のではなく、データへのアクセスを管理するだけです。この例では、アプリによっていつでも読み込まれるデータはBUFFER_SIZEバイト(および他のレイヤーによって使用される他のバッファー)です。

Flush()また、すべての書き込みで実際に行う必要はありません(ただしFlush()、最後にaを付けるのが適切な場合もあります)。

あなたが持っているものは大丈夫です。私が言えるのは、最近のバージョンの.NETでこれを単純化できるということだけです。

using (System.IO.Stream strm = file.OpenBinaryStream())
{
    strm.CopyTo(response);
    // response.Flush(); // optional: only included because it is in the question
}
于 2012-12-14T10:07:49.567 に答える