fea*_*net 21 c# asp.net asp.net-mvc streaming idisposable
我有一个DocumentGenerator
包装的课程MemoryStream
.所以我已经IDisposable
在课堂上实施了.
我看不出如何/在哪里可以处理它.
这是我当前的代码,它在MVC中执行文件下载:
using (DocumentGenerator dg = DocumentGenerator.OpenTemplate(path))
{
/* some document manipulation with the
DocumentGenerator goes here ...*/
return File(dg.GetDocumentStream(), "text/plain", filename);
}
Run Code Online (Sandbox Code Playgroud)
在控制器完成之前关闭/处理流时出现此错误.在这种情况下,如何确保我的资源得到妥善处理?
编辑:我现在的执行IDisposable
只是处置MemoryStream
.我知道这不是一个正确的实现,我只是用它作为测试.有什么不同我可以在这里做它的工作吗?
public void Dispose()
{
_ms.Dispose();
_ms = null;
}
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 32
您不需要处理流.它将由FileStreamResult.WriteFile方法处理.此类的代码摘录:
public FileStreamResult(Stream fileStream, string contentType) : base(contentType)
{
if (fileStream == null)
{
throw new ArgumentNullException("fileStream");
}
this.FileStream = fileStream;
}
protected override void WriteFile(HttpResponseBase response)
{
Stream outputStream = response.OutputStream;
using (this.FileStream)
{
byte[] buffer = new byte[0x1000];
while (true)
{
int count = this.FileStream.Read(buffer, 0, 0x1000);
if (count == 0)
{
return;
}
outputStream.Write(buffer, 0, count);
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意using
.当您File(dg.GetDocumentStream(), "text/plain", filename)
从控制器调用时,它会调用构造函数,该构造函数将流存储到在呈现期间处置的公共属性中.
结论:您不必担心处理获取的流dg.GetDocumentStream()
.
归档时间: |
|
查看次数: |
9845 次 |
最近记录: |