时间:2021-07-01 10:21:17 帮助过:4人阅读
相信任何程序员在编写的代码的时候都考虑到了内存的使用与分配,而这次使用C#编写的SQLHelper类,考虑到了内存的使用与分配问题,这设计到了声明和实例化对象时所使用的不同方法。还有代码的抽象,怎样编写出比较“爽”的代码!
1、声明对象的方式
<span style="font-family:KaiTi_GB2312;font-size:18px;">string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; //读取配置文件中的链接字符串</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">private SqlConnection conn = null; //声明一个Connection对象,令其为null</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">conn = new SqlConnection(connStr);</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">SqlConnection conn1 = new SqlConnection(connStr);//声明一个Connection对象并将其实例化</span>
第一种方式声明了Connection对象,但并没有给conn分配内存,只有到conn真正用的时候分配内存,而第二种方式是直接声明并实例化Connection对象conn1,这样直接就给conn1分配了内存空间,两种方法想比较,我觉得第一种方法好用,因为第一种考虑了内存的使用问题,就是节省内存的使用。
SQLHelper源码
<span style="font-family:KaiTi_GB2312;font-size:18px;">public class SQLHelper
{
private SqlConnection conn = null; //声明一个Connection对象,令其为null
private SqlCommand cmd = null;
private SqlDataReader sdr = null;
private DataTable dt = null;
public SQLHelper()
{
string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; //读取配置文件中的链接字符串
conn = new SqlConnection(connStr);
}
// SqlConnection conn1 = new SqlConnection(connStr);//声明一个Connection对象并将其实例化
private SqlConnection GetConn()
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return conn;
}
/// <summary>
/// 此方法执行传入的SQL语句,执行增删改操作。
/// </summary>
/// <returns>返回更行的记录数</returns>
public int ExecuteNonQuery(string sql)
{
using (cmd = new SqlCommand(sql, GetConn()))
{
int res = cmd.ExecuteNonQuery();
return res;
}
}</span> 与之前的SQLHelper相比,此SQLHelper与之前的SQLHelper编写相比,这种将对数据库操作的一些对象提前声明了,但没有实例化(没有分配内存空间),而且将链接对象的声明和实例化放在了SQLHelper的构造函数中,当我们实例化SQLHelper类的对象时,自然而然的将连接对象给声明并实例化了,而不必再到以前SQLHelper类中重载的函数中再实例化,这样做节省了代码的编写,让我们看起来更爽,而且当系统执行垃圾回收时,使回收资源更加方便。
SQLHelper重构
标签: