Ram*_*mie 2 c# sql multithreading sqlclient
我正在尝试使线程安全的数据访问层(类似于SQL Data Client包装器)。在使性能最大化的同时,我应该采取哪些步骤使此线程安全。
例如,如果我在关闭连接之前在sqlConn上添加了一个锁(因为它实现了IDisposable);如果连接在事务或查询中间怎么办?
总而言之,我正在尝试完成一个线程安全的解决方案。但同时,我不想冒任何重大例外或任何延误的风险。有什么办法可以使结束线程优先?
public class SQLWrapper : IDisposable
{
private SqlConnection _sqlConn;
public SQLWrapper(string serverName_, string dbName_)
{
SqlConnectionStringBuilder sqlConnSB = new SqlConnectionStringBuilder()
{
DataSource = serverName_,
InitialCatalog = dbName_,
ConnectTimeout = 30,
IntegratedSecurity = true,
};
sqlConnSB["trusted_connection"] = "yes";
this.start(sqlConnSB.ConnectionString);
}
public SQLWrapper(string connString_)
{
this.start(connString_);
}
private void start(string connString_)
{
if (string.IsNullOrEmpty(connString_) == true)
throw new ArgumentException("Invalid connection string");
**lock (this._sqlConn)**
{
this._sqlConn = new SqlConnection(connString_);
this._sqlConn.Open();
}
}
private void CloseConnection()
{
**lock (this._sqlConn)**
{
this._sqlConn.Close();
this._sqlConn.Dispose();
this._sqlConn = null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
您应该执行的步骤是:
没有使其线程安全。
简单。
每个线程都应该有自己的副本,并且数据库上会发生锁定/同步。
然后它还将在计算机之间扩展。
这是最近20年左右的标准方法。
因此,每个线程都会创建一个新的SqlWrapper,一切都很好。
| 归档时间: |
|
| 查看次数: |
992 次 |
| 最近记录: |