我正在使用ASP.NET Web构建一个文档管理服务,性能是值得关注的。
基于IIS / ASP.NET ImageResizer模块的作者Nathanael的ASP.NET,我开发了一些关于服务静态文件的“最佳”性能所必需的一些先入为主的概念。这方面的规定是:
HttpModule,因为它在ASP.NET管道中非常早期(更少的管道=更优化),并且比HttpHandler更容易处理这类事情。Response.WriteFile(filename)优于Response.Write(memBuffer),其中memBuffer是内存中的C#缓冲区.Context.RewritePath(virtualPath))优于Response.WriteFile(filename),因为它将使用IIS静态文件处理程序,该处理程序得到了很好的优化。麻烦的是,由于一些奇怪的缓存问题,我仍然无法找到(这里)的底部,我的URL重写技术本身并没有表现出来。
因此,现在我想知道一个更以Web为中心的实现,如下所示:
public Task<HttpResponseMessage> DoTheFoo()
{
return Task<HttpResponseMessage>.Factory.StartNew(() =>
{
var response = new HttpResponseMessage();
response.Headers.Add("Content-Disposition", "inline; filename=\"" + attachmentFileName + "\"");
response.Headers.Add("content-type", mimeType);
response.Content = new StreamContent(File.OpenRead("somefile.doc"));
return response;
});
}对于Web解决方案,这显然会使事情变得更加整洁,因为服务的文件服务部分可以与控制器中的其他操作一起使用,但是它的执行和扩展效果如何呢?我思考的因素:
我不能把服务器场放在一起来测试它以获得真正的性能数字,而且我也怀疑将小规模的测试结果分解会给出任何准确的结果。所以,从那些知道的人看来,我能预料到什么样的差异?我已经准备好放弃URL重写实现了,但是如果它会给我带来显著的性能影响,我将坚持下去。
发布于 2014-11-05 19:11:20
不确定您是否打算在Azure中托管,但如果您是,则可以为您的图像使用专用的公共blob存储容器。然后使用CDN服务为您提供(和缓存)静态文件。这将使问题从API转移到CDN中,CDN用于处理静态资源。
https://stackoverflow.com/questions/14803867
复制相似问题