C# 在ASP.NET中上载大型文件时,如何减少服务器内存使用?

C# 在ASP.NET中上载大型文件时,如何减少服务器内存使用?,c#,asp.net,http,iis,file-upload,C#,Asp.net,Http,Iis,File Upload,默认情况下,ASP.NET中上载的文件在服务器端代码处理之前完全存储在内存中。当同时上载许多大文件时,这会导致服务器中的可伸缩性差 理想的解决方案是允许服务器在上传文件时读取文件(不仅仅是在上传完成时),或者允许服务器组件将上传的数据临时存储在临时文件或数据库中。我还需要将多个大文件上传到服务器。我最终制作了一个WCF服务,并使用silverlight客户端上传文件。这些文件被剪切成128kb的片段,然后上传。通过这种方式,我还可以显示一个很好的进度条,如果上传被破坏(我还发送了一个md5散列的

默认情况下,ASP.NET中上载的文件在服务器端代码处理之前完全存储在内存中。当同时上载许多大文件时,这会导致服务器中的可伸缩性差


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

我还需要将多个大文件上传到服务器。我最终制作了一个WCF服务,并使用silverlight客户端上传文件。这些文件被剪切成128kb的片段,然后上传。通过这种方式,我还可以显示一个很好的进度条,如果上传被破坏(我还发送了一个md5散列的部分),我可以很容易地再次上传部分,而不必再次上传整个文件。

你在这里谈论的是流与缓冲

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

流式选项无疑是最好的方式,考虑SQL Server 2008本身支持文件流I/O,流也可以用WCF。


网上有很多关于WCF和SQL Server流媒体的文章,我不知道您到底需要什么,因为您没有告诉代码的更多细节,也没有显示任何代码。

您在使用什么?
FileUpload
控件?没有ASP.NET控件,只是通过HTTP POST进行纯多部分表单上载。。。