我有一个如此简单的代码:
// cache is disabled
[OutputCache(NoStore = true, Duration = 0)]
public async Task<ActionResult> GetVideo(string path)
{
byte[] data = await _fileService.GetFileAsync(path);
if (data == null)
return HttpNotFound();
return File(data, "video/mp4");
}
此代码非常简单:它将文件的内容检索为字节数组并将其发送到客户端。我有一个包含一些video
标签的网页。所有这些标签都使用GetVideo
作为来源。每个视频大约400-500 Mb。页面准备就绪后,任务管理器中的w3wp.exe需要3-4 Gb RAM并且不会释放内存。正如我之前写的,我使用OutputCacheAttribute禁用resutl缓存。
问题不会隐藏在方法GetFileAsync
中,因为当我替换行
byte[] data = await _fileService.GetFileAsync(path);
带行
byte[] data = System.IO.File.ReadAllBytes(Server.MapPath(path));
这个问题依然存在。也许有人知道如何在向客户端发送字节后释放内存?