0

多分これは投稿するのに良い質問ではないかもしれませんが、私はちょっと必死です. 小さなコードがあり、メモリ リークがありますが、それを克服する方法がわかりません。助けてください。

        var nPiece = stream.Length / BufferLen;
        var lastPieceLen = stream.Length - (nPiece * BufferLen);

        for (int i = 0; i < nPiece + 1; i++)
        {
            var buffer = new byte[i != nPiece ? BufferLen : lastPieceLen];
            stream.Read(buffer, 0, buffer.Length); 
            using (var chunk = new MemoryStream(buffer))
                SsClient.SendChunk(i != nPiece ? (i + 1).ToString() : ((i + 1) + "last"), SsSession, chunk);
            buffer = null;
            GC.Collect();
        }

大きなストリームを小さなチャンクに分割し、SsClient.SendChunk() メソッドを介して WCF サービスに送信します。700 MB のファイルがあるとします。それを 100 MB のチャンクの 7 つの部分に分割し、1 つずつ送信します。しかし、この方法が完了した後、メモリリークとして見られるメモリに約400 mbがあります。デバッグすると、Web サービスの SendChunk メソッドの直後にメモリがチャンクでいっぱいになることがわかります。ここでメソッドが終了すると、メモリリークが残ります。GC.collect() も機能していないようです。なぜ 700 MB のファイルの 400 MB が残っているのかさえ理解できませんでしたか? 多分それは私が知らないいくつかの手がかりを与えるかもしれません。

何か案は?

4

1 に答える 1