C# Stream Response from 3rd party, minimal buffering

前端 未结 2 1240
臣服心动
臣服心动 2020-12-19 21:11

Our ASP.NET MVC endpoint is a behaving as a proxy to another 3rd party HTTP endpoint, which returns about 400MB of XML document generated dynamically.

Is there a way

2条回答
  •  爱一瞬间的悲伤
    2020-12-19 21:50

    You can reduce the memory footprint by not buffering and just copying the stream directly to output stream, an quick n' dirty example of this here:

        public async Task Download()
        {
            using (var httpClient = new System.Net.Http.HttpClient())
            {
                using (
                    var stream = await httpClient.GetStreamAsync(
                        "https://ckannet-storage.commondatastorage.googleapis.com/2012-10-22T184507/aft4.tsv.gz"
                        ))
                {
                    Response.ContentType = "application/octet-stream";
                    Response.Buffer = false;
                    Response.BufferOutput = false;
                    await stream.CopyToAsync(Response.OutputStream);
                }
                return new HttpStatusCodeResult(200);
            }
        }
    

    If you want to reduce the footprint even more you can set a lower buffer size with the CopyToAsync(Stream, Int32) overload, default is 81920 bytes.

提交回复
热议问题