StackExchange 是构建在 ASP.NET 和 SQL Server 基础之上的项目。最近,Sam Saffron 和 Marc Gravell 分别撰写了博客,其中讲述了他们发现和解决性能问题的经验,在该过程中最终追踪到了 .NET GC GEN-2对象。大家可以从他们的博文中吸取很多关于优化生产环境中应用程序性能的经验。
问题是由自定义标签引擎引起的,它会在内存中存放大型对象列表。这两篇博文都值得一读,而 Sam 的文章则更详细地讲述了如何诊断问题。其中主要的应对方法包括:
最后,团队采取了多项优化措施,包括针对应用程序的特定部分,从对象数组切换到索引数组,从类切换到结构体等。第一项措施是一种很常用的模式,这样数组就只针对主要的不可变列表的索引;而第二项并不常用,Sam 建议只在有超过50万个对象以上才使用它,这样在达到第二代垃圾回收器标准的时候就会很快释放内存。
StackExchange 团队对性能问题非常关注——比方说,你可以看到 StackOverflow 在三个不同的等级上使用 caching,从而提升反应时间,减少服务器的负载。
在 InfoQ 上和 MSDN 上都有很多关于性能和可伸缩性的资源可供参考,包括这篇 Rob Howard 撰写的文章。最后,引用 Sam 的话:“做很少的工作总是要比做更多工作消耗的资源少。”
你在扩展 ASP.NET 应用程序的时候,也有发现和解决瓶颈问题的类似经验和大家分享吗?
查看英文原文:How Do You Tune Your Application For Performance?