日期:2008-03-03 浏览次数:20592 次
1. 数据库访问功用优化
数据库的连接和关闭
访问数据库资源需求创建连接、打开连接和关闭连接几个操作。这些过程需求多次与数据库交换信息以通过身份验证,比较耗费服务器资源。ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对功用的影响。系统将用户的数据库连接放在连接池中,需求时取出,关闭时收回连接,等待下一次的连接请求。连接池的大小是无限的,如果在连接池达到最大限制后仍要求创建连接,必然大大影响功用。因此,在建立数据库连接后只要在真正需求操作时才打开连接,使用完毕后马上关闭,从而尽量减少数据库连接打开的时间,避免出现超出连接限制的情况。
使用存储过程
存储过程是存储在服务器上的一组预编译的SQL语句,类似于DOS系统中的批处理文件。存储过程具有对数据库立即访问的功用,信息处理极为迅速。使用存储过程可以避免对命令的多次编译,在执行一次后其执行规划就驻留在高速缓存中,当前需求时只需直接调用缓存中的二进制代码即可。另外,存储过程在服务器端运转,独立于ASP.NET程序,便于修正,最重要的是它可以减少数据库操作语句在网络中的传输。
优化查询语句
ASP.NET中ADO连接耗费的资源相当大,SQL语句运转的时间越长,占用系统资源的时间也越长。因此,尽量使用优化过的SQL语句以减少执行时间。比如,不在查询语句中包含子查询语句,充分利用索引等。
2. 字符串操作功用优化
使用值类型的ToString方法
在连接字符串时,经常使用"+"号直接将数字添加到字符串中。这种方法虽然简单,也可以得到正确结果,但是由于涉及到不同的数据类型,数字需求通过装箱操作转化为援用类型才可以添加到字符串中。但是装箱操作对功用影响较大,由于在进行这类处理时,将在托管堆中分配一个新的对象,原有的值复制到新创建的对象中。使用值类型的ToString方法可以避免装箱操作,从而提高使用程序功用。
运用StringBuilder类
String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对功用的提高并非很明显。在处理字符串时,最好使用StringBuilder类,其.NET 命名空间是System.Text。该类并非创建新的对象,而是通过Append,Remove,Insert等方法直接对字符串进行操作,通过ToString方法前往操作结果。 其定义及操作语句如下所示:
int num;
System.Text.StringBuilder str = new System.Text.StringBuilder(); //创建字符串
str.Append(num.ToString()); //添加数值num
Response.Write(str.ToString); //显示操作结果
3. 优化 Web 服务器计算机和特定使用程序的配置文件以符合您的特定需求
默认情况下,ASP.NET 配置被设置成启用最广泛的功用并尽量顺应最常见的方案。因此,使用程序开发人员可以依据使用程序所使用的功用,优化和更改其中的某些配置,以提高使用程序的功用。下面的列表是您应该考虑的一些选项。
仅对需求的使用程序启用身份验证。
默认情况下,身份验证模式为 Windows,或集成 NTLM。大多数情况下,对于需求身份验证的使用程序,最好在 Machine.config 文件中禁用身份验证,并在 Web.config 文件中启用身份验证。依据适当的请求和呼应编码设置来配置使用程序。ASP.NET 默认编码格式为 UTF-8。如果您的使用程序为严厉的 ASCII,请配置使用程序使用 ASCII 以获得稍许的功用提高。
考虑对使用程序禁用 AutoEventWireup。
在 Machine.config 文件中将 AutoEventWireup 属性设置为 false,意味着页面不将方法名与事件进行婚配和将两者挂钩(例如 Page_Load)。如果页面开发人员要使用这些事件,需求在基类中重写这些方法(例如,需求为页面加载事件重写 Page.OnLoad,而不是使用 Page_Load 方法)。如果禁用 AutoEventWireup,页面将通过将事件连接留给页面作者而不是自动执行它,获得稍许的功用提升。
从请求处理管线中移除不用的模块。
默认情况下,服务器计算机的 Machine.config 文件中 节点的所有功用均保留为激活。依据使用程序所使用的功用,您可以从请求管线中移除不用的模块以获得稍许的功用提升。检查每个模块及其功用,并按您的需求自定义它。例如,如果您在使用程序中不使用会话形状和输出缓存,则可以从 列表中移除它们,以便请求在不执行其他有意义的处理时,不必执行每个模块的进入和离开代码。
4. 一定要禁用调试模式
在部署生产使用程序或进行任何功用测量之前,一直记住禁用调试模式。如果启用了调试模式,使用程序的功用可能遭到非常大的影响。
5. 对于广泛依赖外部资源的使用程序,请考虑在多处理器计算机上启用网络园艺
ASP.NET 进程模型协助启用多处理器计算机上的可缩放性,将任务分发给多个进程(每个CPU一个),并且每个进程都将处理器关系设置为其 CPU。此技术称为网络园艺。如果使用程序使用较慢的数据库服务器或调器具有外部依赖项的 COM 对象(这里只是提及两种可能性),则为您的使用程序启用网络园艺是无益的。但是,在决定启用网络园艺之前,您应该测试使用程序在网络园中的执行情况。
6. 只需可能,就缓存数据和页输出
ASP.NET 提供了一些简单的机制,它们会在不需求为每个页请求动态计算页输出或数据时缓存这些页输出或数据。另外,通过设计要进行缓存的页和数据请求(特别是在站点中预期将有较大通讯量的区域),可以优化这些页的功用。与 .NET Framework 的任何 Web 窗体功用相比,适当地使用缓存可以更好的提高站点的功用,有时这种提高是超数量级的。使用 ASP.NET 缓存机制有两点需求留意。首先,不要缓存太多项。缓存每个项均有开销,特别是在内存使用方面。不要缓存容易重新计算和很少使用的项。其次,给缓存的项分配的无效期不要太短。很快到期的项会导致缓存中不必要的周转,并且经常导致更多的代码清除和垃圾回收任务。若关怀此问题,请监视与 ASP.NET Applications 功用对象关联的 Cache Total Turnover Rate 功用计数器。高周转率可能说明存在问题,特别是当项在到期前被移除时。这也称作内存压力。
7. 选择适合页面或使用程序的数据查看机制
依据您选择在 Web 窗体页显示数据的方式,在便利和功用之间常常存在着重要的权衡。例如,DataGrid Web 服务器控件可能是一种显示数据的方便快捷的方法,但就功用而言它的开销常常是最大的。在某些简单的情况下,您通过生成适当的 HTML 本人呈现数据可能很无效,但是自定义和浏览器定向会很快抵销所获得的额外成效。Repeater Web 服务器控件是便利和功用的折衷。它高效、可自定义且可编程。