【问题标题】:Webapi async upload, buffer and memory usageWebapi 异步上传、缓冲区和内存使用
【发布时间】:2013-10-30 05:00:00
【问题描述】:

我正在试用这篇文章中的代码Part 2: File Upload and Multipart MIME

它基本上是一个执行异步读取的 webapi 任务的表单发布

 await Request.Content.ReadAsMultipartAsync(provider);

为了避免完全上传缓冲和过多的内存使用,我也提出了这篇文章的建议Dealing with large files in ASP.NET Web API

建议创建

   public class NoBufferPolicySelector : WebHostBufferPolicySelector 

和配置

  GlobalConfiguration.Configuration.Services.Replace
  (typeof(IHostBufferPolicySelector), new NoBufferPolicySelector());

但是,当我在没有 NoBufferPolicySelector 的情况下使用 IE 和 Firefox 从另一台机器上测试上传两个 1G 文件时,它们使用了大约 90M 的内存。有,大约 180M。

就这些了吗?这是否意味着 WebApi2 已经内置了内存缓冲区控制?是否需要额外的策略选择器代码?谢谢

【问题讨论】:

    标签: file-upload asynchronous asp.net-web-api buffer


    【解决方案1】:

    StreamContent 未根据 "the guy" 进行缓冲

    public class WebHostBufferPolicySelector 
      : IHostBufferPolicySelector
    {
       ......
    
     public virtual bool UseBufferedOutputStream
          (HttpResponseMessage response)
     {
          return !(content is StreamContent 
                || content is PushStreamContent);
    

    【讨论】:

    • 如果您仔细查看您提到的答案,这是输出,因此是请求的响应。在这里,OP 要求上传,所以对于请求的缓冲,由UseBufferedInputStream 驱动(似乎总是返回true)而不是你提到的UseBufferedOutputStream。
    猜你喜欢
    • 2015-11-15
    • 1970-01-01
    • 2021-11-04
    • 2017-04-20
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    相关资源
    最近更新 更多