WEB开发网
开发学院WEB开发ASP.NET ASP.NET性能优化 阅读

ASP.NET性能优化

 2010-10-31 08:59:55 来源:WEB开发网   
核心提示:2.2.2 显式关闭连接Connection对象本身在垃圾回收时可以被关闭,而依赖垃圾回收是很不好的策略,ASP.NET性能优化(11),推荐使用using语句显式关闭连接,如下例:using (SqlConnection conn = new SqlConnection(connString)){conn.Open(

2.2.2 显式关闭连接
 Connection对象本身在垃圾回收时可以被关闭,而依赖垃圾回收是很不好的策略。推荐使用using语句显式关闭连接,如下例:using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();

} // Dispose is automatically called on the conn variable here


2.2.3 确保连接池启用
 Ado.net是为每个不同的连接串建立连接池,因此应该确保连接串不会出现与具体用户相关的信息。另外,要注意连接串是大小写敏感的。
 2.2.4 不要缓存连接
 例如,把连接缓存到Session或Application中。在启用连接池的情况下,这种做法没有任何意义。
 2.3 Command
 2.3.1 使用ExecuteScalar和ExecuteNonQuery
  如果想返回像Count(*)、Sum(Price)或Avg(Quantity)那样的单值,可以使用ExecuteScalar方法。 ExecuteScalar返回第一行第一列的值,将结果集作为标量值返回。因为单独一步就能完成,所以ExecuteScalar不仅简化了代码,还提 高了性能。
 使用不返回行的SQL语句时,例如修改数据(INSERT、UPDATE或DELETE)或仅返回输出参数或返回值,请使用ExecuteNonQuery。这避免了用于创建空DataReader的任何不必要处理。
 2.3.2 使用Prepare
 当需要重复执行同一SQL语句多次,可考虑使用Prepare方法提升效率。需要注意的是,如果只是执行一次或两次,则完全没有必要。例如:
cmd.CommandText = "insert into Table1 ( Col1, Col2 ) values ( @val1, @val2 )";

cmd.Parameters.Add( "@val1", SqlDbType.Int, 4, "Col1" );
cms.Parameters.Add( "@val2", SqlDbType.NChar, 50, "Col2");

cmd.Parameters[0].Value = 1;
cmd.Parameters[1].Value = "XXX";
cmd.Prepare();
cmd.ExecuteNonQuery();

cmd.Parameters[0].Value = 2;
cmd.Parameters[1].Value = "YYY";
cmd.ExecuteNonQuery();

cmd.Parameters[0].Value = 3;
cmd.Parameters[1].Value = "ZZZ";
cmd.ExecuteNonQuery();


2.3.3 使用绑定变量 ★
 SQL语句需要先被编译成执行计划,然后再执行。如果使用绑定变量的方 式,那么这个执行计划就可以被后续执行的SQL语句所复用。而如果直接把参数合并到了SQL语句中,由于参数值千变万化,执行计划就难以被复用了。例如上 面Prepare一节给出的示例,如果把参数值直接写到insert语句中,那么上面的四次调用将需要编译四次执行计划。
 为避免这种情况造成性能损失,要求一律使用绑定变量方式。
 2.4 DataReader
  DataReader最适合于访问只读的单向数据集。与DataSet不同,数据集并不全部在内存中,而是随不断发出的read请求,一旦发现数据缓冲区 中的数据均被读取,则从数据源传输一个数据缓冲区大小的数据块过来。另外,DataReader保持连接,DataSet则与连接断开。
 2.4.1 显式关闭DataReader
  与连接类似,也需要显式关闭DataReader。另外,如果与DataReader关联的Connection仅为DataReader服务的话,可考 虑使用Command对象的ExecuteReader(CommandBehavior.CloseConnection)方式。这可以保证当 DataReader关闭时,同时自动关闭Connection。
 2.4.2 用索引号访问代替名称索引号访问属性
 从Row中访问某列属性,使用索引号的方式比使用名称方式有细微提高。如果会被频繁调用,例如在循环中,那么可考虑此类优化。示例如下:

上一页  6 7 8 9 10 11 12 13 14 15 16  下一页

Tags:ASP.NET 性能优化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接