写点什么

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

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

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

关注

评论

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

TiDB v7.5.0 LTS 升级必读 | 新特性补充说明

TiDB 社区干货传送门

版本升级 新版本/特性解读 7.x 实践

在线教育小程序如何一键生成App

Onegun

在线教育 小程序转app

苹果Mac电脑:2023年度mac app | Pixelmator Pro 图像编辑修图

Rose

Pixelmator Pro Mac修图软件 Pixelmator Pro破解 苹果软件下载

OmniPlan Pro 4 for Mac:专业的项目管理规划工具

Rose

OmniPlan Pro 4 OmniPlan Pro许可证 Mac项目管理软件 OmniPlan Pro Mac中文版 OmniPlan Pro注册码

​网易游戏实时 HTAP 计费风控平台建设

TiDB 社区干货传送门

实践案例

领先实践之鑫阳钢铁∣短流程钢铁企业废钢智能判级的行业标杆

用友BIP

废钢智能判级

Gestimer for Mac:轻量定时器,提醒大小事

Rose

Gestimer Mac中文版 Gestimer破解版 Gestimer下载 Mac任务提醒工具

HTAP 还可以这么玩?丨TiDB 在 IoT 智慧园区的应用

TiDB 社区干货传送门

实践案例

推荐5款很牛的Paas平台编译构建工具

伤感汤姆布利柏

如何用Excel进行数据分析?Excel分析数据功能教程分享

Rose

Excel使用教程 Excel 数据分析 Excel 下载

解密 ArcGraph 分布式一致性:Raft 协议与分布式事务实现丨技术专栏

Fabarta

分布式事务 分布式系统 raft协议 分布式图数据库

TiDB知识点梳理 (PCTA 笔记分享)

TiDB 社区干货传送门

TiDB 底层架构 TiDB 源码解读

Pipeline模式应用 | 京东云技术团队

京东科技开发者

pipeline 流程编排 管道模式

文心ERNIE Bot SDK+LangChain:基于文档、网页的个性化问答系统

飞桨PaddlePaddle

人工智能 开发者 开发工具

Linus:我休假的时候也会带着电脑,否则会感觉很无聊

极狐GitLab

Linux 开源 AI DevOps gitlab

从ClickHouse通往MySQL的几条道路 | 京东物流技术团队

京东科技开发者

MySQL 数据库 Clickhouse

【12 月 9 号线上 Meetup 预告】兼容 MySQL 的原生分布式数据库,聊聊 TiDB 为何是 MySQL 5.7 停服后的新选择

TiDB 社区干货传送门

社区活动

DM同步为已有迁移任务增加新同步的表

TiDB 社区干货传送门

迁移 实践案例 管理与运维

使用TiKV-CDC实现rawkv集群的两地三中心

TiDB 社区干货传送门

实践案例 集群管理 数据库架构选型 数据库架构设计 6.x 实践

TiDB-v7.5.0 DDL 启停特性分析

TiDB 社区干货传送门

版本测评 新版本/特性发布 新版本/特性解读 7.x 实践

语言模型:GPT与HuggingFace的应用

华为云开发者联盟

人工智能 华为云 GPT 华为云开发者联盟

苹果电脑FTP客户端:Transmit for mac 中文版 支持M/intel

Rose

Mac 软件 Transmit 5 Transmit破解版 FTP客户端

从 Oracle 到 TiDB,全链路数据迁移平台核心能力和杭州银行迁移实践

TiDB 社区干货传送门

实践案例

恢复的方式多种多样,总有一款适合你

TiDB 社区干货传送门

备份 & 恢复

on duplicate key update引发的索引数据不一致问题

TiDB 社区干货传送门

故障排查/诊断

详细了解大数据离在线混部架构模型

易程

大数据 Kubernetes 云原生大数据 离在线混部 大数据离在线混部

CurveFS 助力网易云商,解决语音识别训练数据增长需求

OpenCurve

云计算 开源 文件存储 分布式文件存储 海量数据

通俗解释一下“强静态类型”

伤感汤姆布利柏

在线教育小程序正在成为教育行业的技术强兵

Onegun

小程序 在线教育 在线学习 小程序化

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