如何提高ASP.NET软件开发中的程序性能

我将不限于只讨论asp.net应用程序的内容,因为它们只是web应用程序的一个子集。本文也不能提供一个完整提高web应用程序性能的指南,因为这需要一本书的篇幅。本文只提供一个提高web应用程序性能的良好的开端。(剩下的只有我们自己慢慢研究了)。

在工作这外,我经常去攀岩,在每次攀岩之前,我都会重温一下攀岩线路图及看一下前面的成功的攀岩者的建议。因为我们需要它们的成功经验。同样的,当你需要修改某个有性能问题的程序或者是要开发一个高性能的站点时,你也需要学习怎么样写一个高性能的web应用程序。

我个人的经验主要来源于在微软的asp.net组担任程序经理,运行和管理网站,和协助开发Community Server(它是asp.net Forums,.Text, and nGallery的集成升级版本软件)。我想这些经验能我让来帮助大家。

你也许会想到把你的应用程序划分成不同的逻辑层。你也可能听过三层物理架构或N层架构,这是最常用的架构模式,它把不同的程序功能物理的分配给各个硬件来执行。这样,如果我们想提高应用程序的性能的话,加一些硬件就可以达到目的了。按理说这种方法能提高应用程序的性能,但是我们应该避免使用这种方法。所以,只要有可能,我们都应该把asp.net页面和它用到的组件放到一个应用程序中运行。

因为分布式的布署,要用到web services或者Remoting,它将使应用程序的性能下降20%或者更多。

对于数据层有点不同,最好还是把它独立出来布署,用一个单独的硬件来运行它。虽然这样,但是数据库仍然是应用程序性能的瓶颈。因此,当你想优化你的程序的时候,首先想到的地方就应该是优化数据层了。

在修改应用程序的出现性能问题的地方之前,你要先确认出问题的地方的程序看起来很严密,性能分析器对于查找应用程序哪些地方花费了多长时间非常有用。这些地方是我们用直觉感觉不到的。

本文讨论两种类型的性能优化:一种是大的性能优化(big optimizations),如用asp.net的Cache;另一种是小的性能优化(tiny optimizations)。小幅的性能优化有时候非常有用。你只对你的代码作一个小的改到,然后一次调用它一千或一万次。作一次大的性能优化,你会发生你的应用程序的速度会有一个很大的提升。作一次小的性能优化,也许每次请求只能提高一微秒,但是如果每天的请求量很大的话,那么应用程序就有很显著的性能提升。

数据层的性能

当你要优化一个应用程序的性能的时候,你可以按下面的顺序工作:你的代码要访问数据库?如果要,访问数据库频率怎么样?同样,这种测试方法也可以用在用web services或Remoting的程序代码中。本文将不讨论用Web services和Remoting的程序优化的问题。

如果在你的代码中有一段必须访问数据库的请求,而你在其它的地方又看到实现同样的功能 的代码,那么你首先要优化它。修改和完善继续测试,除非你有一个非常大的性能问题,你的时间最好花在优化查询,连接数据库,返回数据集的大小,以及一次查询往返回的时间上。

根据经验的总结,让我们来看看十个能帮助你提升你的应用程序性能的经验,我将按将它们提升效率的多少从大到小小依次说明。

一、返回多个数据集

检查你的访问数据库的代码,看是否存在着要返回多次的请求。每次往返降低了你的应用程序的每秒能够响应请求的次数。通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的系统具有扩展性,也可以减少数据库服务器响应请求的工作量。

如果你是用动态的SQL语句来返回多个数据集,那我建议你用存储过程来替代动态的SQL语句。是否把业务逻辑写到存储过程中,这个有点争议。但是我认为,把业务逻辑写到存储过程里面可以限制返回结果集的大小,减小网络数据的流量,在逻辑层也不用在过滤数据,这是一个好事情。

用SqlCommand对象的ExecuteReader方法返回一个强类型的业务对象,再调用NextResult方法来移动数据集指针来定位数据集。示例一演示了一个返回多个ArrayList强类型对象的例子。只从数据库中返回你需要的数据可以大大的减小你的服务器所耗用的内存。

时间: 2024-08-30 19:20:01

如何提高ASP.NET软件开发中的程序性能的相关文章

项目开发经验-ASP.NET项目开发中的异常处理

前言:异常的处理在项目开发中是很有必要的,异常的处理不仅仅只是try..catch..finally就完事了的.异常处理绝对可以称开发中的重要组成部分.必须正确的面对异常,因为即使是最能干的开发人员,也要面对这个问题 .... 我们不知道客户是怎么样使用我们开发的软件的,所以我们必须处理这样的情况:如果系统不按照我们的设计时所想的运行,我们改怎么办? 下面我们就来具体的介绍在ASP.NET项目开发中的异常的处理方式,希望看完后,大家可以回答上面的问题. 本篇的话题如下: 应用程序级别异常处理的错

评审技术在高质量软件开发中的应用分析(下)

接评审技术在高质量软件开发中的应用分析(上) 三.评审在高质量软件开发的实际应用 3.1 高质量软件开发项目介绍 高质量软件,如电信软件.金融证券类软件等,有较严格的要求:可用性要求非常高,并且不会因为系统维护和扩展而带来运营中断:支持使用现有管理工具和标准进行远程管理:能够提供更出色的性能以及运营在高可用性集群上的能力,减少任何单点的软硬件失效现象.五个九(99.999%)意味着一个系统的宕机时间一年不超过5分26秒.因此高质量软件项目是一种对可用性.可靠性.稳定性要求非常高的软件项目,要求软

谈谈如何应对软件开发中的需求变更

令人烦恼的需求变更     在软件开发中,大家都会遇到过这样的问题:客户的一个新想法,就推翻了之前与客户经过再三讨论而确认定下来的需求.如果是功能性需求变更还会让人容易接受一些,毕竟功能性需求不实现的话,是会大大影响到软件产品的质量.但是一些非功能性的变更会让人很头疼,许多是看起来无关痛痒的.鸡毛蒜皮的变更,却是极为令人无语和无奈,甚至是烦恼和厌恶的.     (1)什么是软件需求?     在IEEE中,软件需求的定义是:用户解决问题或达到目标所需的条件或功能.一般包含业务需求.用户需求.功能

软件开发中的“格调”

在三年之前,我从学校毕业,进入公司,正式开始了软件开发工作.我从完成第一个开发任务的过程中学到了很多东西,包括:1)编写程序只是软件开发中的一个流程,并非全部:2)程序编写需要遵循一定的规范,远远不只是实现功能那么简单:3)程序编写者是程序的第一负责人,要对自己的程序进行充分的自测,而非只要程序编写完成便万事大吉了.大家在学校里面也编写过程序,但那并非规范的软件开发活动.从学校里面的"业余"进化为正式工作岗位上的"专业",就需要提升我们的"编程格调&quo

讨论四种关键的质量保证实践在软件开发中的重要性

软件开发和工程被视为非常年轻的职业:但是,它们得到了广泛应用,并且正以比以往更快的速度增长.在许多国家,软件行业目前通常被视为经济增长的主要支柱之一.软件公司常常面临着提供高质量软件的许多困难挑战,而他们也在竭尽所能地让客户满意. 软件质量不可或缺 随着软件变成日常生活中不可或缺的一部分,对软件的需求也明显增长.相应地,高软件质量目前被视为是 "必须具备的" 而不是 "应该具备的".让质量保证团队从一开始就参与到项目规划和执行中,这一点至关重要.然而,仍然有一些公司

基于CruiseControl和Rational统一变更管理实现的软件开发中的自动化持续构建

基于CruiseControl和Rational统一变更管理实现的软件开发中的自动化持续构建 简介:本文介绍了持续构建工具 CruiseControl 和 IBM Rational 统一变更管理集成的解决方案.通 过本文中的解决方案,可以尽早的发现和规避代码中存在的风险,遵守统一的流程及时获取可发布的软件 ,确保敏捷开发的速度和质量. 统一变更管理系统中持续集成的必要性 使用 IBM Rational ClearCase 和 IBM Rational ClearQuest 实现的统一变更管理软件

软件开发中要注意的25个问题

软件开发中要注意的25个问题 软件项目从开始到结束,由于资源.人员.管理.方法等等各方面的因素,往往不可避免的会存在一些问题,如需求沟通不明确.项目管理失败等等,今天总结了一下结合网上的一些经验,整理了25个软件开发中的问题. 1.不能很好的理解用户的需求,与用户之间的沟通存在问题. 2.错误的预估项目的大小和难易度. 3.没有排期计划就匆匆开始编码. 4.没有在项目初期就开始做测试,一直拖到项目后期才做,或者根本不做什么测试. 5.选择时下的高新技术还是已经被团队使用比较成熟的技术,往往不能做

产品经理在软件开发中起到了十分重要的作用

提到产品经理的职责,我们首先想到的就是其要对整个产品周期负责,从市场调查.产品规划.设计.项目管理.产品上线.上线推广.产品改版升级等产品的全过程管理,可以说产品经理在软件开发中起到了十分重要的作用. 近日,专为企业挖掘潜在销售的大数据分析公司Infer的CEO兼创始人Vik Singh根据自身所闻和经历,就公司喜欢招募的产品经理.如何招到优秀的产品经理以及怎样成为优秀的产品经理撰文.Infer公司用户包括Tableau.SurveyMonkey.Zendesk.New Relic.AdRoll

android-Androi软件开发中资深的发送短信问题

问题描述 Androi软件开发中资深的发送短信问题 我自己写了一个发送短信的APK,但是当我第一次用这个软件,点了发送按钮,有个杀毒软件会提示我是否发送,虽然之后点发送按钮不会提示,但是我想第一次就不提示直接发送则么办?换句话说就是跳过杀毒软件直接发送....求大神 解决方案 这个比较难了,你卸载杀毒软件吧,要么你的代码把杀毒软件干掉 解决方案二: 首杀毒软件一般有较高权限,所以你很难绕过它.不然它能轻易卸载,还怎么保护 解决方案三: LZ这个是实现不了的,因为你申请的权限属于使用时询问,就算没