【问题标题】:How do I reduce server memory usage when uploading large files in ASP.NET?在 ASP.NET 中上传大文件时如何减少服务器内存使用量?
【发布时间】:2011-10-18 10:09:37
【问题描述】:

默认情况下,在 ASP.NET 中上传的文件完全存储在内存中,然后才能被服务器端代码处理。当同时上传许多大文件时,这会导致服务器的可扩展性较差。

理想的解决方案是允许服务器在文件上传时读取文件(不仅是在上传完成时),或者使用服务器组件将上传的数据临时存储在临时文件或数据库中。

【问题讨论】:

  • 你在用什么? FileUpload 控件?
  • 没有 ASP.NET 控件,只是通过 HTTP POST 的纯多部分表单上传...

标签: c# asp.net http iis file-upload


【解决方案1】:

您在这里谈论的是流式传输与缓冲。

当您的 ASP.NET 应用程序中有 byte[] buffer = ...; 行时,无论是用于上传还是下载,您都在进行缓冲并且遇到您在问题中提到的内存问题。事实上,你有时可以直接调用GC 来强制释放内存,但有文章、博客、人和意见绝对反对这一点。

流式传输无疑是最好的选择,考虑到 SQL Server 2008 本身支持 FILESTREAM I/O,并且流式传输也可以使用 WCF 完成。

网上有很多关于 WCF 和 SQL Server 流的文章,我不知道你到底需要什么,因为你没有详细说明你的代码,也没有显示任何代码。

【讨论】:

    【解决方案2】:

    我还需要将多个大文件上传到服务器。我最终制作了 WCF 服务并使用 silverlight 客户端上传文件。这些文件被削减为 128kb 的片段并被上传。通过这种方式,我还可以显示一个不错的进度条,如果上传已损坏(我还发送了该部分的 md5 哈希),我可以轻松地再次上传该部分,而不必再次上传整个文件。

    【讨论】:

      猜你喜欢
      • 2013-03-17
      • 2011-11-22
      • 1970-01-01
      • 2011-08-07
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多