写点什么

你会如何优化应用程序的性能?

  • 2011-11-06
  • 本文字数:884 字

    阅读完需:约 3 分钟

StackExchange 是构建在 ASP.NET 和 SQL Server 基础之上的项目。最近, Sam Saffron Marc Gravell 分别撰写了博客,其中讲述了他们发现和解决性能问题的经验,在该过程中最终追踪到了.NET GC GEN-2 对象。大家可以从他们的博文中吸取很多关于优化生产环境中应用程序性能的经验。

问题是由自定义标签引擎引起的,它会在内存中存放大型对象列表。这两篇博文都值得一读,而 Sam 的文章则更详细地讲述了如何诊断问题。其中主要的应对方法包括:

  • 使用分析器。你可以使用类似于 MVC-MiniProfiler 的工具来分析方法调用,使用类似于.NET Memory Profiler 或者 Redgate ANTS Memory profiler 之类的内存分析器来跟踪内存使用情况。
  • 如果可以的话,要拥有可查询的日志——StackExchange 团队有后台执行的进程,它会解析原始的日志,并把它插入到大型的、专门的 SQL Server 实例中。如果无法查询日志,那么你就无法绘制出统计图并查看趋势或者模式。
  • 理解 GC 是如何工作的——.NET 中的垃圾回收器支持三代对象(GEN 0 到 GEN 2),而存放时间最长的数据会使用 GEN-2。GEN-2 的扫描频率最低,执行的成本最高,甚至可能会堵塞其它线程。Sam 建议阅读 Rico 的《Garbage Collector Basics and Performance Hints》一文以获得更多细节。

最后,团队采取了多项优化措施,包括针对应用程序的特定部分,从对象数组切换到索引数组,从类切换到结构体等。第一项措施是一种很常用的模式,这样数组就只针对主要的不可变列表的索引;而第二项并不常用,Sam 建议只在有超过 50 万个对象以上才使用它,这样在达到第二代垃圾回收器标准的时候就会很快释放内存。

StackExchange 团队对性能问题非常关注——比方说,你可以看到 StackOverflow 在三个不同的等级上使用caching ,从而提升反应时间,减少服务器的负载。

在InfoQ 上和MSDN 上都有很多关于性能和可伸缩性的资源可供参考,包括这篇 Rob Howard 撰写的文章。最后,引用 Sam 的话:“做很少的工作总是要比做更多工作消耗的资源少。”

你在扩展 ASP.NET 应用程序的时候,也有发现和解决瓶颈问题的类似经验和大家分享吗?

查看英文原文: How Do You Tune Your Application For Performance?

2011-11-06 02:503571
用户头像

发布了 340 篇内容, 共 146.5 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

Linux Lab 进阶: Qemu 模拟器 & Toolchain 工具链

贾献华

Linux Tool Linux Kenel qemu Toolchain

反常识的学习思维

小匚

自我思考 成长笔记

基于Docker的大数据开发环境 - HDP Sandbox

大数志

大数据 hadoop spark

week12-根据当周学习情况,完成一篇学习总结

未来已来

Springboot+Netty+Websocket实现消息推送实例

Java架构师迁哥

《王阳明一切心法》读书随笔

BigYoung

读书笔记 28天写作 2月春节不断更 王阳明

做事情时,脑袋中一次只装一件事

熊斌

读书笔记 2月春节不断更

翻译:《实用的Python编程》01_01_Python

codists

Python

上古神器 sed 教程详解,小白也能看得懂

鞋子特大号

Linux sed

week12-作业一

未来已来

第十一周命题作业

cc

LeetCode题解:33. 搜索旋转排序数组,二分查找,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

week-13-作业一

未来已来

第6周课后练习-技术选型二

潘涛

架构师训练营 4 期

MyBatis专栏 - 一级缓存

小马哥

Java mybatis 七日更 2月春节不断更

架构师训练营大作业

菜青虫

热乎的阿里、百度、平安等大厂面试真题 你要不要?

比伯

Java 编程 架构 面试 计算机

Java线上故障解决方案

Java 架构

week13-作业二-根据当周学习情况,完成一篇学习总结

未来已来

探寻内部类的奥秘(下)

后台技术汇

2月春节不断更

AI窥人(一):为什么人类热衷“过度投射”?

脑极体

话题讨论:公司已经发不出工资了,你会选择坚持还是放弃?

石云升

话题讨论 2月春节不断更

第十一周学习心得

cc

架构师训练营大作业(二)

花果山

架构师训练营第2期

WiFi 空口抓包工具 --- OmniPeek

并发编程系列:并发编程基础

程序员架构进阶

架构 JVM 七日更 28天写作 2月春节不断更

使用 Tye 辅助开发 k8s 应用竟如此简单(二)

newbe36524

微服务 k8s dotnet 服务发现

张弛之间,皆是生活

boshi

随笔 七日更

民办二本程序员阿里、百度、平安等五厂面经,5份offer(含真题)

Java 编程 面试

【LeetCode】可获得的最大点数

Albert

算法 LeetCode 2月春节不断更

日记 2021年2月6日(周六)

Changing Lin

个人感悟 2月春节不断更

你会如何优化应用程序的性能?_.NET_Roopesh Shenoy_InfoQ精选文章