我正在为 C# 设计一个数据库包装器。
以下是我有两个选择:
选项A:
class DBWrapper:IDisposable
{
private SqlConnection sqlConn;
public DBWrapper()
{
sqlConn = new SqlConnection("my connection string");
sqlConn.Open();
}
public DataTable RunQuery(string Sql)
{
implementation......
}
public Dispose()
{
if(sqlConn != null)
sqlConn.Close();
}
}
选项B:
class DBWrapper
{
public DBWrapper()
{
}
public DataTable RunQuery(string Sql)
{
SqlConnection sqlConn = new SqlConnection("my connection string");
.....implementation......
sqlConn.Close();
}
}
对于选项 A 连接在类实例化时打开。因此,无论调用者调用 RunQuery 多少次,连接始终处于就绪状态。但是,如果应用程序在应用程序的早期实例化 DBWrapper,则连接将仅打开并且不执行任何操作,直到应用程序完成为止。此外,它可以在执行期间实例化许多 DBWrapper。所以,这有点浪费资源。
对于选项 B,它不存在选项 A 所存在的问题,但每次调用者调用 RunQuery 时都必须打开和关闭新连接。我不确定这会对性能造成多大影响。
请分享您的专业知识。感谢您的阅读。
出于性能原因,您肯定不想选择选项 B(至少在我经历过的情况下)。
让我建议选项C:
class DBWrapper:IDisposable {
private SqlConnection sqlConn;
public void EnsureConnectionIsOpen()
{
if (sqlConn == null)
{
sqlConn = new SqlConnection("my connection string");
sqlConn.Open();
}
}
public DataTable RunQuery(string Sql)
{
EnsureConnectionIsOpen();
implementation......
}
public Dispose()
{
if(sqlConn != null)
sqlConn.Close();
}
}
您可以考虑使用单例模式来确保 DBWrapper 只有一个实例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)