QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

  • 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:503191
用户头像

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

关注

评论

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

带你全面认识CMMI V2.0(终)——实施落地

IPD产品研发管理

项目管理 软件 CMMI

CSS 学习笔记(一) 选择器

U2647

CSS CSS小技巧 4月日更

java中三种内存溢出错误的处理方法

Sakura

4月日更

Python OpenCV 边缘滤波保留(EPF)

梦想橡皮擦

Python OpenCV 4月日更

基于拉链式和线性探测式散列表实现Map

Silently9527

Java hashmap 线性探测 拉链式散列表 散列表

Dubbo 编解码那些事

vivo互联网技术

dubbo RPC 序列化 编解码

HECO火币生态链智能合约Dapp软件系统APP开发

系统开发

区块链商品溯源平台--全流程捍卫食品安全

13530558032

可视化运行Python的神器Jupyter Notebook

程序那些事

Python Jupyter Notebook 程序那些事

区块链电子合同签署平台,区块链电子合同解决方案

13828808769

区块链+ #区块链#

MemVerge CEO表示基于大内存的基础架构将取代性能层级存储

Steven Xu

内存 存储 基础框架 傲腾

GopherChina 2021 定了,干货满满的来了

GoCN技术社区

Go 语言 GopherChina

Spark数据倾斜解决方案实战(三)

小舰

4月日更

边缘计算应用的价值

云计算

Linux crontab 命令

一个大红包

Linux linux命令 4月日更

解读金融高频交易不出错的金手指:分布式事务管理

华为云开发者联盟

微服务 事务 华为云 数据一致性 分布式事务管理

区块链结合农业产业,平台全程溯源

电微13828808271

线上服务 CPU 100%?一键定位 so easy!

Java小咖秀

性能 cpu 负载 线上排障 线上问题

智慧公安重点人员管控系统搭建,重点人员管控解决方案

13828808769

智慧交通

「免费开源」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之docker部署(八)

crudapi

Docker Vue crud crudapi quasar

nginx性能优化--配置解析

箭上有毒

nginx 性能测试 4月日更

书单|互联网企业面试案头书之产品经理篇

博文视点Broadview

区块链“数据上链”管理系统

电微13828808271

什么是自然语言处理(NLP)?

澳鹏Appen

人工智能 自然语言处理 聊天机器人 nlp 自然语言

nginx.conf核心配置

马里奥

nginx Configuration 配置

新特性巨量来袭,MindSpore开源一周年实力“狂欢”

华为云开发者联盟

开源 modelarts mindspore 数据预处理加速 分子模拟库

有了这个数据强一致“利器”,DBA们轻松修复数据对加班“say no”

华为云开发者联盟

存算分离 华为云数据库 GaussDB(for Cassandra) 强一致 开源Cassandra

源中瑞区块链Baas平台--助力区块链应用落地

13530558032

【LeetCode】二叉搜索树节点最小距离Java题解

Albert

算法 LeetCode 4月日更

区块链农产品防伪溯源平台,助力赣南脐橙产业发展

13828808769

区块链+ #区块链#

聊聊LiteOS事件模块的结构体、初始化及常用操作

华为云开发者联盟

LiteOS 事件 事件结构体 事件掩码

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