龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > asp.net编程 >

一点小经验分享提高.net数据库操作效率的方法

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
其实也没有好讲的,很菜的方法,不过可能有些刚入门的朋友不太注意,下面讲一下吧。 第1. 重用数据库连接和一定时间内保持连接的打开:经常使用的数据库操作可以封装成一个实用

其实也没有好讲的,很菜的方法,不过可能有些刚入门的朋友不太注意,下面讲一下吧。

第1.

重用数据库连接和一定时间内保持连接的打开:经常使用的数据库操作可以封装成一个实用类。但是频繁的打开一个数据库连接和关闭连接使得性能收到很大的影响。比如使用一个ExecuteReader或者ExecuteNonQuery中打开一个连接,接着关闭它,如果连续有3个以上这样的操作的话,能够共用这个连接就好了,如果这个连接保持打开,在所有的数据获取完毕之后再关闭就更好。因此构想建立两个类,一个DbConn类,用来创建连接并维护一个连接池。当创建连接的时候检查连接池,如果连接字符串一样,并且这个连接不繁忙的话就返回这个连接;另一个类为DbOperator,封装IDbConnection和IDbCommand,使用IDbCommand进行常规的数据操作。该类提供一个PersistOpen的属性和打开连接的Open与关闭连接的Close方法。在调用Close方法的时候先检查PersistOpen是否为真,如果为真则并不真正关闭连接,否则直接关闭连接。任何时候Close连续调用一定次数后也可以来真正关闭连接。因此,利用DbConn的连接池和DbOperator的软关闭,基本能够做到连接的重用与连接保持的目的。实际使用中打开PersistOpen后,查询时间是不打开的二分之一以下,性能得到了提高。

第2.

用可替代的方法代替聚合计算函数:Select Count(*)和Select AVG(column)等聚合计算函数很影响性能。如果使用IDataReader来实现这些功能速度会有不小的进步。Select Count(*)可用IDataReader.Read()循环进行累加计数得到记录数,如此替代后运行时间是前者的三分之一,如果一边计数一边加和列值,将二者相处即可得到AVG类似的功能,时间也大大缩短。

精彩图集

赞助商链接