ASP.NET Web API StreamContent与IIS静态文件处理程序

时间:2013-02-10 23:26:41

标签: performance iis asp.net-web-api httpmodule

我正在使用ASP.NET Web API整合文档管理服务,并且某些关注性能。

基于IIS / ASP.NET ImageResizer模块的作者Nathanael Jones的this article,我已经对最佳"以及最佳"的所需内容产生了一些先入之见。服务静态文件的性能。其存在的原因是:

  1. 使用HttpModule,因为它在ASP.NET管道的早期(较少的管道=更优化)并且比{{1}更容易处理这类事情}。
  2. HttpHandler优于Response.WriteFile(filename),其中memBuffer是内存中的C#缓冲区。
  3. 网址重写(即Response.Write(memBuffer))优于Context.RewritePath(virtualPath),因为它将使用经过充分优化的IIS静态文件处理程序。
  4. 麻烦的是,由于一些奇怪的缓存问题,我仍然无法找到(here)的底部,我的网址重写技术本身并没有表现出来。

    所以现在我想知道更多以Web API为中心的实现,如下所示:

    Response.WriteFile(filename)

    对于Web API解决方案,这显然会使事情变得更加简洁,因为服务的文件服务部分可以与控制器中的其他操作一起使用,但它的执行和扩展程度如何?我思考的因素:

    1. 网络带宽。大概没有区别,所有技术都写入相同数量的字节。
    2. 写入传出网络流的速度。 IIS静态文件处理程序在这方面可能比ASP.NET管道好一点?也许整合管道问题少了?这项服务将服务于消费者级别的几百kbit DSL线路,最高可达gbit LAN。
    3. RAM使用情况。我假设StreamContent实现不如IIS静态文件处理程序有效。
    4. CPU使用率。与RAM一样,我假设StreamContent比IIS静态文件处理程序要求更高。
    5. 服务器端缓存。 IIS静态文件处理程序提供了这一点(而且正是让我烦恼的原因,因为它似乎并没有表现出来),但假设我可以让它表现自己,在StreamContent实现之前提供好处。我并不担心这方面,因为该服务更有可能响应很多不同的文件请求,而不是反复重复。
    6. 我无法组建一个服务器场来测试它以获得真实的性能数据,而且我怀疑将小规模测试结果分解会给出任何准确的结果。那些知情人士,我可以期待什么样的差异?我几乎已经准备好放弃URL重写实现,但如果它能给我一个明显的性能影响,我就会坚持下去。

1 个答案:

答案 0 :(得分:1)

不确定您是否计划在Azure中托管,但如果您是,则可以为图像使用专用的公共Blob存储容器。然后使用CDN服务为您提供(和缓存)静态文件。这会将问题从您的API转移到CDN,CDN旨在处理静态资源。