3

我有一个专用于下载文件的控制器,如下所示:

  public ActionResult Download( string ids )
  {

     MyFileModel myfile = new MyFileModel(ids);
     Stream s = myfile.GetStream();

     return File( s, contentType, newFileName );
  }

我看到File从返回是FileStreamResult但我的 RAM 已满(我有 8GB 并下载 raeches 7GB)和 CPU 100%

如何优化下载?

4

1 回答 1

6

如何优化下载?

不要将整个文件加载到内存中。将其保存在磁盘上,并将服务器上此文件的位置指定为 File 方法的第一个参数:

// get the physical location of the file on the disk:
string file = Server.MapPath("~/App_Data/somefile.dat");
return File(file, contentType, newFileName );

现在,如果您告诉我您在数据库中存储了一个 5GB 的文件,那么您希望我告诉您什么?我想你已经知道答案了。

但正如@Marc 在评论部分所述,即使您在数据库中存储了如此大的文件,您仍然可以有效地实现这一点。这个想法是编写一个自定义的 ActionResult,它将从数据库流中以块的形式读取文件,并将这些块直接刷新到响应输出流。

于 2013-06-12T07:03:41.600 回答