关于ASP·NET的性能优化的探讨

时间:2022-07-17 11:59:46

摘要:随着Internet的普及,越来越多的企业建立了自己的WWW网站,企业通过网站可以展示产品,最新动态,与用户进行交流和沟通,与合作伙伴建立联系,以及开展电子商务等。网站建设在采用了技术的系统性能上有了很大的改善。

关键字:ASP.NET、性能 开发优化

Abstract: With the popularity of the Internet, more and more enterprises to establish their own WWW site, the enterprises through the website can show the product, the latest developments, exchange and communication with the user, to establish contact with partners, as well as e-commerce. Site construction has been greatly improved system performance using technology.Key words: ASP. NET, and performance; development; optimization

中图分类号:G250.72 文献标识码:A文章编号:2095-2104(2012)

随着Internet的普及,越来越多的企业建立了自己的WWW网站,企业通过网站可以展示产品,最新动态,与用户进行交流和沟通,与合作伙伴建立联系,以及开展电子商务等。

一、技术的系统性能的优势

传统的网站管理方式有两种,一是静态HTML页面,更新信息时需要重新制作页面然后上传页面并修改相应链接,这种方式因为效率太低已不多用。二是基于ASP和脚本语言,将动态网页和数据库结合,通过应用程序来处理进行网站管理,这是目前较为流行的做法。但是由于ASP本身的局限性使得系统有一些不可克服的缺陷,而采取了技术的系统性能上有了很大的改善,其主要表现在以下几方面:

1、由于ASP页面每次打开都必须经过先编译后解释的过程,所以页面在反复打开时速度没有任何提升,而页面只需要一次编译后不需要重新编译,直到该页面被修改或Web应用程序重新启动。这使得在多次访问时速度有了极大的提升。

2、由于ASP没有提供任何输出数据为内容的元件,所以在使用ASP撰写数据库页面时只能借助ADO的RecordSet对象逐笔读取记录,而通过提供的DataGrid等数据库元件可以直接和数据库联系。

3.支持应用程序的实时更新。管理员不必关掉网络服务器或者甚至不用停止应用程序的运行就可以更新应用文件。应用程序文件永远不会被加锁,因此甚至在程序运行时文件就可以被覆盖。当文件更新后,系统会温和地转换到新的版本。

4.采取"code-behind"方式编写代码使得代码更易于编写,结构更清晰,降低了系统的开发与维护的复杂度和费用。

但是我们用开发网站,无论我们写的应用程序有多么好,无论在Web站点中添加了多少很酷的新特性,如果我们的站点在处理用户请求时哪怕只是让用户等待了几秒钟,用户也不会对我们的站点留下好印象。事实上,如果用户等得太久,他们就会放弃而去访问另一个站点。那么,如何才能提高站点的响应速度,这就要考虑到我们在开发过程中如何优化的性能。这就是我们所说的性能开发及其优化。

二、的性能开发和优化

(一)利用JIT编译器提高程序执行速度

高性能代码旨在能少做工作就少做工作,这是不言而明的。

在编译任何的应用程序时,编译器把源代码转换为Microsoft中间语言(MSIL)。要在一个具体环境中执行应用程序,一个JIT编译器先接受MSIL输出并把指令转换为主机处理的本机指令,再以即时方式编译代码,以便应用程序开始执行。但是,JIT编译器不是把程序集中所有的MSIL都在开始执行前转换为本机代码,只是一次编译一个方法。JIT编译器采用的这种方法有两个性能上的优势。第一个优势:这项技术把编译的成本分摊在一个较长的时间内,由于执行会比JIT编译器把所有的MSIL都进行编译看起来要快,这样感觉到应用程序的性能提高了。如果把长时间的暂停或等待时间分成小块,把它们分散开,你的用户就不会注意到它们,用户对你的应用程序的性能也会比较满意。第二个优势:JIT编译器不编译在执行期间用不到的方法。因此不会做没有必要的工作,无论什么时候省去不必要的处理工作,你就会发现可以获得真正的性能增益。

(二)数据库访问性能优化

1、使用存储过程

存储过程是存储在服务器上的一组预编译的SQL语句,类似于DOS系统中的批处理文件。存储过程具有对数据库立即访问的功能,信息处理极为迅速。使用存储过程可以避免对命令的多次编译,在执行一次后其执行规划就驻留在高速缓存中,以后需要时只需直接调用缓存中的二进制代码即可。另外,存储过程在服务器端运行,独立于程序,便于修改,最重要的是它可以减少数据库操作语句在网络中的传输。

2、优化查询语句

中ADO连接消耗的资源相当大,SQL语句运行的时间越长,占用系统资源的时间也越长。因此,尽量使用优化过的SQL语句以减少执行时间。

(三)字符串操作性能优化

1、使用值类型的ToString方法

在连接字符串时,经常使用"+"号直接将数字添加到字符串中。这种方法虽然简单,也可以得到正确结果,但是由于涉及到不同的数据类型,数字需要通过装箱操作转化为引用类型才可以添加到字符串中。但是装箱操作对性能影响较大,因为在进行这类处理时,将在托管堆中分配一个新的对象,原有的值复制到新创建的对象中。使用值类型的ToString方法可以避免装箱操作,从而提高应用程序性能。

2、运用StringBuilder类

String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显著。在处理字符串时,最好使用StringBuilder类,其.NET 命名空间是System.Text。该类并非创建新的对象,而是通过Append,Remove,Insert等方法直接对字符串进行操作,通过ToString方法返回操作结果。

(四)优化 Web 服务器计算机和特定应用程序的配置文件以符合您的特定需要

默认情况下, 配置被设置成启用最广泛的功能并尽量适应最常见的方案。因此,应用程序开发人员可以根据应用程序所使用的功能,优化和更改其中的某些配置,以提高应用程序的性能。

1、仅对需要的应用程序启用身份验证。

默认情况下,身份验证模式为 Windows,或集成 NTLM。大多数情况下,对于需要身份验证的应用程序,最好在 Machine.config 文件中禁用身份验证,并在 Web.config 文件中启用身份验证。根据适当的请求和响应编码设置来配置应用程序。 默认编码格式为 UTF-8。如果您的应用程序为严格的 ASCII,请配置应用程序使用 ASCII 以获得稍许的性能提高。

2、考虑对应用程序禁用 AutoEventWireup。

在 Machine.config 文件中将 AutoEventWireup 属性设置为 false,意味着页面不将方法名与事件进行匹配和将两者挂钩(例如 Page_Load)。如果页面开发人员要使用这些事件,需要在基类中重写这些方法(例如,需要为页面加载事件重写 Page.OnLoad,而不是使用 Page_Load 方法)。如果禁用 AutoEventWireup,页面将通过将事件连接留给页面作者而不是自动执行它,获得稍许的性能提升。

3、从请求处理管线中移除不用的模块。

默认情况下,服务器计算机的 Machine.config 文件中 节点的所有功能均保留为激活。根据应用程序所使用的功能,您可以从请求管线中移除不用的模块以获得稍许的性能提升。检查每个模块及其功能,并按您的需要自定义它。例如,如果您在应用程序中不使用会话状态和输出缓存,则可以从 列表中移除它们,以便请求在不执行其他有意义的处理时,不必执行每个模块的进入和离开代码。

(五)只要可能,就缓存数据和页输出

提供了一些简单的机制,它们会在不需要为每个页请求动态计算页输出或数据时缓存这些页输出或数据。另外,通过设计要进行缓存的页和数据请求(特别是在站点中预期将有较大通讯量的区域),可以优化这些页的性能。与 .NET Framework 的任何 Web 窗体功能相比,适当地使用缓存可以更好的提高站点的性能,有时这种提高是超数量级的。使用 缓存机制有两点需要注意。

1、不要缓存太多项。缓存每个项均有开销,特别是在内存使用方面。不要缓存容易重新计算和很少使用的项。

2、给缓存的项分配的有效期不要太短。很快到期的项会导致缓存中不必要的周转,并且经常导致更多的代码清除和垃圾回收工作。若关心此问题,请监视与 Applications 性能对象关联的 Cache Total Turnover Rate 性能计数器。高周转率可能说明存在问题,特别是当项在到期前被移除时。这也称作内存压力。

(六) 避免单线程单元 (STA) COM 组件

默认情况下, 不允许任何 STA COM 组件在页面内运行。若要运行它们,必须在 .aspx 文件内将 ASPCompat=true 属性包含在 @ Page 指令中。这样就将执行用的线程池切换到 STA 线程池,而且使 HttpContext 和其他内置对象可用于 COM 对象。前者也是一种性能优化,因为它避免了将多线程单元 (MTA) 封送到 STA 线程的任何调用。使用 STA COM 组件可能大大损害性能,应尽量避免。若必须使用 STA COM 组件,如在任何 interop 方案中,则应在执行期间进行大量调用并在每次调用期间发送尽可能多的信息。另外,小心不要在构造页面期间创建任何 STA COM 组件。

总之,我们只有在提高应用程序水平,不断丰富Web站点中新特性的同时,不断的探索和对的开发和优化,我们才能建立高质量的网站,才能使网站拥有更多的用户。

上一篇:对如何加强电力工程土建施工质量的探讨 下一篇:会计监督中存在的问题与对策