写这个帖子主要也是因为在用PTS测试网站的时候,手动访问网站进入报错页面,主要原因是数据库连接对象存在问题,导致并发多的时候产生故障,于是简单分析了一下数据库读写的性能优化以及利用PTS的测试结果,整理出来和大家分享一下,顺便参加一下这个活动。
几乎所有的网站都需要数据库来存储网站中的相关信息,因此在网站应用与数据库的交互过程中,数据库数据读取的性能对网站整体的性能是至关重要的。
通常我们在网站编写之初不会考虑数据库的读写效率,主要是因为这时候网站建设的重点并不在数据库读写性能上,而是在数据库读写处理得正确性上,因此很多网站的开发人员一开始并没有重视这个问题,包括我也一样,在之前网站开发中,每次需要读写的操作,利用定义好的数据库连接类new一个对象,然后执行操作即可,至于连接对象的连接池,交给系统自己去维护,并没有过多的干预。
比如常见的的一种方式如下:
SQLServerCMD cmd = newSQLServerCMD();
// new SQLServerCMD()时,自动从连接池中获取一个可用连接,再使用Open打开连接,使用完毕后Close String value = cmd.QueryValue("selectuser_name from User_Table where user_id=123"); |
SQLServerCMD cmd = newSQLServerCMD();
String value = cmd.QueryValue("GetUserName123"); |
方法一:两个表进行自然连接后条件查询:
SQLServerCMD cmd = newSQLServerCMD();
SqlDataReaderdr = cmd.Query("select user_name from User_Table,User_Log where user_id=log_user_idand user_id=123") |
方法二:两个表没有进行自然连接,采取嵌套的方式进行查询:
SQLServerCMDcmd = new SQLServerCMD();
SQLServerCMDcmd2 = new SQLServerCMD();
SqlDataReader dr =cmd.Query("GetLog 12"); //获取第12条记录的数据
string username="-";
using(dr)
{
if(dr.Read())
{
string id =dr["user_id"].ToString().Trim();
username = cmd2.Get_Value("selectuser_name from User_Table where user_id=" + id);
}
}
|
privatestatic List<SQLServerCMD> pool = new List<SQLServerCMD>(); //连接对象集合
privatestatic Dictionary<int, int> used = new Dictionary<int, int>(); //连接对象使用次数
privatestatic int index = 0; //轮询连接标识
privatestatic int MaxCount = 20; //连接池连接对象数
|
SQLServerCMDcmd = SqlConnectionPool.GetSqlConnection();
Stringvalue = cmd.QueryValue("GetUserName 123");
|
普通连接
|
SQLServerCMD cmd = newSQLServerCMD(); SQLServerCMD cmd2 = newSQLServerCMD(); SqlDataReader dr =cmd.Query("select * from User_Table"); string id ="123"; string username ="-"; using (dr) { if (dr.Read()) { id =dr["user_id"].ToString().Trim(); username =cmd2.Get_Value("select user_name from User_Table where user_id=" +id); } } cmd.Update("updateUser_Table set user_name='LT' where user_id='" + id + "'"); cmd.CloseConnection(); cmd2.CloseConnection(); |
自定义连接池连接
|
SQLServerCMD cmd =SqlConnectionPool.GetSqlConnection(); //连接的初始化方式不同 SQLServerCMD cmd2 =SqlConnectionPool.GetSqlConnection(); SqlDataReader dr =cmd.Query("select * from User_Table"); string id="123"; using(dr) { if(dr.Read()) { id =dr["user_id"].ToString().Trim(); string username =cmd2.Get_Value("select user_name from User_Table where user_id=" +id); } } cmd.Update("updateUser_Table set user_name='LT' where user_id='" + id+"'"); |
-------------------------
-------------------------
-------------------------
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。