关于using中的类提升到Property
public class Service
{
public List<A> GetA()
{
using (DatabaseHelper helper = new DatabaseHelper())
{
...//Get A
}
}
public List<B> GetB()
{
using (DatabaseHelper helper = new DatabaseHelper())
{
...//Get B
}
}
}
因为DatabaseHelper实现了Dispose接口,所以只要using就可以省去connection close相关操作。
但是现在的问题是,用户在使用的时候,
Service service = new Service();
service.GetA();
service.GetB();
这建立了两次数据库连接。有没有什么办法把DatabaseHelper作为Service的Property,并且能够调用using方式吗?
------解决方案--------------------昨天我也纠结类似的问题,后来发现,在连接池里有连接的情况下,
SqlConnection conn = new SqlConnection(xxx);
conn.Open();
conn.Close();
这三个操作加起来只用了0.015毫秒左右,我的是普通双核笔记本。
------解决方案--------------------把DatabaseHelper放到Service中来维护,然后要实现IDispose接口,因为你维护的是一个已经实现IDispose接口的DatabaseHelper对象,所以Service类自己也必须实现。
public class Service:IDispose
{
DatabaseHelper?helper;
public List<A> GetA(){...}
public List<B> GetB(){...}
bool disposed = false;
Dispose(byManual)
{
if(!disposed)
{
//第一次释放
if(byManual)
{
//释放托管资源代码
}
//释放非托管资源代码
helper.Dispose();
}
disposed = true;
}
//手动Dispose()或using释放非托管资源
public void Dispose(){
Dispose(true);
//取消终结,则不会调用~Service()
GC.SuppressFinalize(this);
}
//析构自动释放非托管资源
~Service()
{
Dispose(false);
}
}