[翻译]ASP.NET 2.0网站应用程序的性能优化

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

摘要:

开发一个对用户的请求做出很快回应的应用程序是每个开发者的目标和挑战!ASP.NET是为速度优化和性能改进而设计的,它的改进体现在在服务端的页编译和自动存储。然而,当你的应用程序在同一时间内执行大量的请求时,这项改进仍然无法防止性能的降低。

为了写一个高性能的应用程序,你必需平衡通常影响性能的四个方面. 表现如下:

执行时间:执行一个请求所花的时间,从接收到第一个字节算起到接收到最后一个字节所花的时间。

响应时间:从发送请求到服务器响应接收到第一个字节所花的时间。

伸缩性:这个主要表现在服务器分配给应用程序的资源(内存,CPU或电脑)。

吞吐量:在一个单位时间内(通常是1秒)能够处理请求的数量。

以下是能够让你开发出一个高性能应用程序的几个方面:

状态管理,

数据存储,

页面和服务器控件,

网页应用程序,

代码实践。

我们先从前面两个方面来展开说明,在下一篇文章中将涵概后面三个方面的内容,以及缓存技术将在缓存优化的文章里详细讲解。

状态管理:

以下列出的一些建议指出怎样更有效的执行状态管理:

SessionState 语句:

当你不用Session时请关闭Session状态,并不是所有的网站都会保存每个用户Session状态。当你禁用不必要的Session状态时你的网站性能将会有所提高。在网页中禁Session状态请用下面的代码:

1      <% @ page EnableSessionState="false"  %>
2

  如果你的页面只要求读取Session的值,你可以将其设为只读。如果要禁用整个网站的Session会话可以打开Web.config文件,将SessionState节点的mode属性设置为false,代码如下:
1   < SessionState  mode ="off"   />

Session State Provider 

不只一个存储Session状态数据的方式,你可以从Web.config文件中的SessionState节点的Mode属性中设置你所喜欢的方式来存储其数据。它所支持的存储方式包括:in-process模式,state server模式,Sql server模式以及自定义模式。每一种模式在选定的环境下都有其自身的优势。in-process模式是至今最快的一种模式,如果你想用Session来存储一些小而且经常变动的数据,这种模式是你理想的选择。如果你想在重起你的服务器后仍然维持你的Session状态,state server模式和SQL Server模式是不错的选择。

数据存储:

  以下几点指出怎么更有效的进行数据存储:

  应用SQL server provider

  
Sql server provider能够开发更高效的网站应用程序以及更好的扩展性。

  应用SQL DATA READER

  SqlDataReader类在整个运行过程中只检索中一次数据,因此在条件允许的情况下应用
SqlDataReader类来替代 DataSet,DataTable等,这样能给你的应用程序带来更高的性能。

  应用存储过程

  尽可能的用存储过程来代替命令语句,因为存储过程是经过编译以后执行的,这样就能够提高数据库处理速度。

  应用SqlDataSource的相关属性

  替换包括"Where"或"Sort by"的SQL条件语句,充分利用SqlDataSource的相关属性(如:
caching, filtering,  sorting )
你可以将SqlDataSource对象的"EnableCaching"属性设置为true以激活将所检索的数据缓存于这个DataSource中。当你激活缓存时,SqlDataSource对象将对所检索的缓存数据中执行如filtering和Sorting。可以应用SqlDataSource对象的FilterExpression和SortParameterName两个属性来对数据进行过滤和排序操作。这样肯定能够提高你网站的性能。

  ViewState加密
 
  为了提高安全性,必须将重要的保存在ViewState的数据进行加密解密,但这样会对你的应用程序的速度带来一定的影响。加密包括一个以装载的对象初始化加上一个未加载的数据的大小,如果数据越大所耗的时间也越长,因此应对ViewState数据视其重要性而进行适当的加密。

  分页

  众所周知,如果你要显示一个给定数据源的数据,你必须用一些像:GridView或DetailsView等服务器控件,并将其数据源进行邦定。你可能将会通过GridView
DetailsView 来对数据源的记录或列进行筛选,将其paging属性设为true。这种分页技术叫做UI分页(User Interface paging)。为了实现这项功能,GridView控件会请求获取特殊的数据源,从中获取当前页面所需要的所有记录而忽视其他的数据。在每一页中都需要执行这样的操作,这样当然造成资源很大的浪费。

  还有一个技术能实现这种功能,这中技术就是数据源分页技术。这种技术将借助于data source控件来实现,DataSourceView就是处理类,当GridView或DetailsView应用到此数据源时将其CanPage属性设为true。这样数据源将只取当前页的数据,可以看出数据源分页比UI分页更有效。唯一可以让数据源分页的为ObjectDataSource类。

  缓存

  应用缓存能够其他任何技术更能提高你网站的性能。.NET 框架提供了几种缓存页面的通道以及在ASP.NET应用程序中缓存数据的方法。你可以将很重要而又在各个请求中不变的数据或页面进行缓存。

  为了能够使缓存更有效,请看以下几点:

  -不要缓存短时间过期的缓存项,每一个缓存项过期都涉及到缓存的清理和垃圾的回收。

  -不要缓存太大的缓存项,这样对每一项将消耗更多的内存。一些很容易计算等的数据就没有必要进行缓存。

  缓存如此重要,Asp.NET框架给我们提供了多种的通道来逐渐改进我们的网站性能。这些方法包括:缓存应用程序数据,页面输出缓存,缓存一个网页和缓存页面中的一部分。

更多内容可以看MSDN。

本文转自网魂小兵博客园博客,原文链接:http://www.cnblogs.com/xdotnet/archive/2007/03/08/translate_speed_optimization_first.html,如需转载请自行联系原作者

相关文章
|
2月前
|
C# Android开发 iOS开发
2025年全面的.NET跨平台应用框架推荐
2025年全面的.NET跨平台应用框架推荐
105 23
|
4月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
4月前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
195 2
|
5月前
|
SQL XML 关系型数据库
入门指南:利用NHibernate简化.NET应用程序的数据访问
【10月更文挑战第13天】NHibernate是一个面向.NET的开源对象关系映射(ORM)工具,它提供了从数据库表到应用程序中的对象之间的映射。通过使用NHibernate,开发者可以专注于业务逻辑和领域模型的设计,而无需直接编写复杂的SQL语句来处理数据持久化问题。NHibernate支持多种数据库,并且具有高度的灵活性和可扩展性。
77 2
|
5月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
131 9
|
6月前
|
数据采集 JSON API
.NET 3.5 中 HttpWebRequest 的核心用法及应用
【9月更文挑战第7天】在.NET 3.5环境下,HttpWebRequest 类是处理HTTP请求的一个核心组件,它封装了HTTP协议的细节,使得开发者可以方便地发送HTTP请求并接收响应。本文将详细介绍HttpWebRequest的核心用法及其实战应用。
233 6
|
6月前
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
244 10
|
7月前
|
数据库 C# 开发者
WPF开发者必读:揭秘ADO.NET与Entity Framework数据库交互秘籍,轻松实现企业级应用!
【8月更文挑战第31天】在现代软件开发中,WPF 与数据库的交互对于构建企业级应用至关重要。本文介绍了如何利用 ADO.NET 和 Entity Framework 在 WPF 应用中访问和操作数据库。ADO.NET 是 .NET Framework 中用于访问各类数据库(如 SQL Server、MySQL 等)的类库;Entity Framework 则是一种 ORM 框架,支持面向对象的数据操作。文章通过示例展示了如何在 WPF 应用中集成这两种技术,提高开发效率。
120 0
|
7月前
|
开发者 API Windows
从怀旧到革新:看WinForms如何在保持向后兼容性的前提下,借助.NET新平台的力量实现自我进化与应用现代化,让经典桌面应用焕发第二春——我们的WinForms应用转型之路深度剖析
【8月更文挑战第31天】在Windows桌面应用开发中,Windows Forms(WinForms)依然是许多开发者的首选。尽管.NET Framework已演进至.NET 5 及更高版本,WinForms 仍作为核心组件保留,支持现有代码库的同时引入新特性。开发者可将项目迁移至.NET Core,享受性能提升和跨平台能力。迁移时需注意API变更,确保应用平稳过渡。通过自定义样式或第三方控件库,还可增强视觉效果。结合.NET新功能,WinForms 应用不仅能延续既有投资,还能焕发新生。 示例代码展示了如何在.NET Core中创建包含按钮和标签的基本窗口,实现简单的用户交互。
112 0
|
7月前
|
Java Spring 自然语言处理
Spring 框架里竟藏着神秘魔法?国际化与本地化的奇妙之旅等你来揭开谜底!
【8月更文挑战第31天】在软件开发中,国际化(I18N)与本地化(L10N)对于满足不同地区用户需求至关重要。Spring框架提供了强大支持,利用资源文件和`MessageSource`实现多语言文本管理。通过配置日期格式和货币符号,进一步完善本地化功能。合理应用这些特性,可显著提升应用的多地区适应性和用户体验。
70 0

热门文章

最新文章