【发布时间】:2016-05-31 04:22:08
【问题描述】:
我们的 ASP.NET MVC 端点充当另一个第三方 HTTP 端点的代理,它返回动态生成的大约 400MB 的 XML 文档。
ASP.NET MVC 有没有办法通过“最小”缓冲将第 3 方响应直接“流式传输”到我们端点的用户?
目前,ASP.NET System.Web.Mvc.Controller.File() 似乎将整个文件加载到内存中作为响应。 除了内存使用量的跳跃之外,我不确定如何确认这一点?
System.Web.Mvc.Controller.File(
IIS AppPool 内存使用量增加了 400MB,之后被垃圾收集器回收。
如果我们可以避免 System.Web.Mvc.Controller.File() 将整个 400MB 字符串加载到内存中,通过“几乎直接”从传入的响应流式传输,那就太好了, 有可能吗?
mock c# linqpad 代码大致是这样的
public class MyResponseItem {
public Stream myStream;
public string metadata;
}
void Main()
{
Stream stream = MyEndPoint();
//now let user download this XML as System.Web.Mvc.FileResult
System.Web.Mvc.ActionResult fileResult = System.Web.Mvc.Controller.File(stream, "text/xml");
fileResult.Dump();
}
Stream MyEndPoint() {
MyResponseItem myResponse = GetStreamFromThirdParty("https://www.google.com");
return myResponse.myStream;
}
MyResponseItem GetStreamFromThirdParty(string fullUrl)
{
MyResponseItem myResponse = new MyResponseItem();
System.Net.WebResponse webResponse = System.Net.WebRequest.Create(fullUrl).GetResponse();
myResponse.myStream = webResponse.GetResponseStream();
return myResponse;
}
【问题讨论】:
标签: c# asp.net-mvc