写点什么

PDC 09:ASP.NET 4 运行时的改进

  • 2009-11-26
  • 本文字数:1513 字

    阅读完需:约 5 分钟

在近期举办的 PDC 09 大会中,ASP.NET 团队的程序经理 Stefan Schackow 展示了 ASP.NET 4 在运行时方面的改进。改进主要围绕“性能”和“可扩展性”两个方面进行,具体表现三点:新的资源监视选项、会话状态以及输出缓存的扩展能力。

对于一个 Web 服务器来说,CPU 和内存占用量是两个较为重要的性能指标,而两者相比之下,内存相对又更容易成为瓶颈。自从 IIS 6 引入了“应用程序池”的概念开始,多个 ASP.NET 应用程序便可以工作在单个进程之中。但是在这种情况下,我们就很难通过性能监视器来获得某个特定的 Web 应用程序所占用的系统资源,这有时会让问题的定位变得困难重重。由于 CLR 4 可以获得某个单独的应用程序域所占用的 CPU,以及堆上托管内存的数量,于是在 ASP.NET 4 中引入了一个名为“应用程序域资源管理(AppDomain Resource Management,ARM)”的功能,它会检测并预估单个 Web 应用程序资源占用的趋势,并将各种数据开放给性能计数器。

在 ASP.NET 4 中,ARM 功能默认并不会开放。ARM 功能无法通过修改单独应用程序的 web.config 文件打开,你需要去系统的.NET 配置目录中修改 Aspnet.config 文件,在节点中将 AppDomainResourceMonitoring 启用,最后还需要重启应用程序池。然后便可以在性能监视器中查看 ASP.NET Applications 分类中的相应计数器。值得注意的是,性能监视器中显示的托管内存占用并非是精确值,而是一个“预测”,这是因为只有在第 2 代的 GC 发生时,CLR 才能获得托管堆中内存占用的准确数量。

在会话状态(Session State)使用方面,ASP.NET 4 也作出了有效的改进。Stefan 表示,客户中使用会话状态的 ASP.NET 应用程序数量之多超过了他的想象,尤其是跨进程(Out of Process)的 Session 使用方式更是影响 Web 应用程序性能的主要因素之一。因此,ASP.NET 4 利用.NET 中的压缩功能,对跨进程的会话状态进行了压缩,包括 SQL Server 和会话状态服务器——而这一切只需要在 web.config 中进行配置即可。进行压缩之后可以节省 1/3 到 2/3 的流量,不过会带来一些 Web 服务器的 CPU 压力。

目前,ASP.NET 运行时会根据当前请求的 Http Handler 是否实现 IRequireSessionState 接口来判断是否启用 Session。在 ASP.NET 4 中,开发人员可以通过编程接口来控制某个请求是否启用会话状态。此外,ASP.NET 4 还提供了“部分会话状态(Partial Session State)”的功能,即只加载会话状态指定 key 的数据,这除了有效减少会话状态的通信开销外,也提供了额外的扩展能力。例如,ASP.NET 团队打算在 AppFabric 分布式缓存(其前身为 Velocity)正式发布后,基于 AppFabric 构建一个新的 Session State Provider。

ASP.NET4 在输出缓存(Output Cache)上也增加了一些扩展点,主要可以让开发人员为控件和请求级别的缓存定制存储机制,例如磁盘,分布式缓存,甚至是云中,而在目前的 ASP.NET 中,所有数据都只能缓存在进程的内存中。这个扩展机制支持缓存的绝对过期(Absolute Expiration)时间,文件依赖,和静态替换和验证回调功能,不过为了保证缓存实现的通用性,它不支持相对过期(Sliding Expiration)时间和其他形式的依赖。与会话状态一样,在 AppFabric 发布之后,ASP.NET 团队也会提供相应的 Ouput Cache Provider,不过按照计划这会在 ASP.NET 4 RTM 之后才会发布了。Stefan 表示,这些额外的 Provider 扩展都会作为开源项目托管在 CodePlex 网站上。

最后,基于 IIS 7.5 的“预热”功能,ASP.NET 4 可以让IIS 7.5 自动运行web.config 中指定的页面。Stefan 表示,这个功能并不会给程序性能带来提高,只是让用户避免遭遇程序冷启动所带来的延迟效果。

你可以在 PDC 2009 的网站上浏览或下载本次演讲的完整录像及幻灯片等资源。

2009-11-26 04:534541
用户头像

发布了 157 篇内容, 共 62.9 次阅读, 收获喜欢 6 次。

关注

评论

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

SLSA: 成功SBOM的促进剂

安势信息

开源 开源软件供应链 软件物料清单 SBOM SLSA

RabbitMQ基础知识

龙空白白

RabbitMQ

RabbitMQ访问Web端口报错User can only log in via localhost

龙空白白

Flutter中的GetX状态管理用起来真的那么香吗?

岛上码农

flutter ios 移动端开发 安卓开发 6月月更

Java Core 「16」J.U.C Executor 框架之 ScheduledThreadPoolExecutor

Samson

学习笔记 Java core 6月月更

在宇宙的眼眸下,如何正确地关心东数西算?

脑极体

一款支持内网脱机分享文档的接口测试软件

Xd

Java 后端 接口测试工具

apipost接口断言详解

Xd

Java 接口测试工具

linux存储结构与磁盘划分

乌龟哥哥

6月月更

应用实践 | Apache Doris 整合 Iceberg + Flink CDC 构建实时湖仓一体的联邦查询分析架构

SelectDB

数据库 flink Doris iceberg

微信视频号如何用 PC 电脑做直播?

boshi

直播 视频号

开发协同,高效管理 | 社区征文

武师叔

初夏征文

ribbon

卢卡多多

6月月更

uni-app进阶之认证【day12】

恒山其若陋兮

6月月更

Android 11适配指南之Toast解析

yechaoa

android 适配 6月月更 11.0

脚本之美│VBS 入门交互实战

Windows Server 6月月更 VBS 脚本之美

华为云低时延技术的九大绝招

坚果

6月月更

一文简述:供应链攻击知多少

穿过生命散发芬芳

供应链攻击 6月月更

什么是数据中台

奔向架构师

数据中台 数据仓库 6月月更

Java中使用正则检查有效日期

okokabcd

Java

openGauss Developer Day 2022正式开启,与开发者共建开源数据库根社区

小程序容器到底是什么

Geek_99967b

如何低成本构建一个APP

Geek_99967b

小程序

浅谈如何运营好小红书账号:利用好长尾词理论

石头IT视角

JVM调优简要思想及简单案例-怎么调优

zarmnosaj

6月月更

Fabric.js 手动加粗文本iText

德育处主任

canvas FabricJS 6月月更

远程办公之:如何成为时间管理大师?| 社区征文

甜甜的白桃

初夏征文

C语言自定义类型的介绍(结构体,枚举,联合体,位段)

未见花闻

6月月更

给你讲懂 MVCC

Nick

MySQL 源码 MVCC 6月月更 深入解析

学C++还是学Java?做软件研发还需掌握哪些知识和技能?

dvlinker

Java c++ 数据库 网络知识 汇编代码

PDC 09:ASP.NET 4运行时的改进_.NET_赵劼_InfoQ精选文章