4

バックグラウンド

CompressFilterからの統合を検討しています

MVC で生成された HTML から余分な空白を削除する

自分のコードに。それを行う前に、で費やした時間を測定したいと思いCompressFilterます。Visual Studio Profiler を使用できないため、単純なストリーム ラッパーを作成することにしました。

private class BenchmarkStream : Stream
{
    Stream inner;

    public BenchmarkStream(Stream inner)
    {
        if (inner == null) throw new ArgumentException("inner");
        this.inner = inner;
    }

    public override void Write(byte[] buffer, int offset, int count)
    {
        Stopwatch sw = Stopwatch.StartNew();
        inner.Write(buffer, offset, count);
        sw.Stop();
        Debug.WriteLine("Compressed " + count + " bytes in " + 
           sw.ElapsedMilliseconds + "ms");
    }
    // Rest of implementation removed for brevity
}

のように使われる

response.Filter = new BenchmarkStream(
                    new GZipStream(response.Filter, CompressionMode.Compress));

質問

私は自分のストリームを破棄する責任innerがありますか、それとも ASP.Net ランタイムがそれを行うメカニズムはありますか?

のコードは、またはに割り当てられた をCompressFilter明示的に破棄しませんが、ランタイムが を破棄する方法がわかりません。 GZipStreamDeflateStreamresponse.Filterinner

私はそれを正しく仮定し、それが構成するストリームを破棄する責任がありますかGZipStream?DeflateStream

4

0 に答える 0