【问题标题】:How to reduce memory pressure and thread usage when handling a large file upload in ASP.NET?在 ASP.NET 中处理大文件上传时如何减少内存压力和线程使用?
【发布时间】:2011-11-22 03:58:28
【问题描述】:

我想做的是将请求异步流式传输到文件存储,这样传入的请求就不会占用大量内存,并且不会为 IO 阻塞处理线程。

我看到有一个可以实现的异步 HTTP 处理程序。这看起来有助于线程使用,但看起来请求已经被 IIS/ASPNET 完全复制到内存中。

有没有办法让 ASP.NET 在处理之前不读取整个请求?

【问题讨论】:

  • 我应该澄清一下,这是一个当前使用通用 HTTP 处理程序实现的 Web 服务。我熟悉从一个流复制到另一个流或数据库。我不熟悉的是,在将传入的 HTTP 请求复制到其他地方之前,如何防止它被完全加载到内存中。
  • 我注意到您没有回复这里的任何答案。您是否花时间查看它们,看看它们是否符合您的要求?

标签: asp.net performance


【解决方案1】:

在 .NET 4 的 HttpRequest 中添加了一个名为 GetBufferlessInputStream() 的新方法,可让您同步访问请求流。

来自MSDN article

此方法提供了使用 InputStream 属性的替代方法。 InputStream 属性一直等到收到整个请求后才返回 Stream 对象。相反,GetBufferlessInputStream 方法立即返回 Stream 对象。您可以使用该方法在收到正文的完整内容之前开始处理实体正文。

.NET 4.5 将提供异步访问请求流的​​功能。请参阅What's New in ASP.NET 4.5 article 了解更多信息。看起来在 4.5 中会有一些不错的 ASP.NET 性能改进。

【讨论】:

  • 有人真的有一个如何使用它的示例代码吗?
【解决方案2】:

你搜索的不够多。

您需要的解决方案在此处逐步详细说明:Efficiently Uploading Large Files via Streaming

检查这个,你的问题是重复的:Streaming uploaded files directly into a database table

【讨论】:

    【解决方案3】:

    虽然this SO question 专门针对 MVC,但答案通常适用于 ASP.NET。具体来说,人们似乎对Darren Johnstone's UploadModule 有很好的体验。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      • 2013-03-17
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多