我有这个方法。
[HttpGet("view/{fileId}/{width}/{height}/{name}")]
public async Task<FileStreamResult> View(Guid fileId, int width, int height, string name)
{
var fileInfo = await _fileViewer.GetImageInfo(fileId, width, height);
FileStream f = new FileStream(fileInfo.FilePath, FileMode.Open);
return File(f, fileInfo.MimeType);
}
这段代码简单地将重新调整大小的图片返回给浏览器。它可以正常工作,但据我所知,它会导致内存泄漏。
FileStream f
从未被释放。
我发现我的服务器内存正在缓慢地被使用。
如果我在这里添加一个using
语句,我会得到一个错误,指出流已关闭,即在文件返回给用户之前,using
语句已经关闭。
应该如何正确处理呢?
更新1. 这段代码:
using (FileStream f = new FileStream(fileInfo.FilePath, FileMode.Open))
{
return File(f, fileInfo.MimeType);
}
yields
System.ObjectDisposedException:无法访问已释放的对象。 对象名称:“无法访问已关闭的文件。”。
using
语句的代码?显然,正确的答案是要么显式调用Dispose()
,要么将你的FileStream
包装在一个using
语句中,但我们需要评估为什么你的using
语句没有起作用。 - Jeremy CaneyFile
方法的Stream
的地方。 - Kirk Larkin