我正在使用线程池进行一些繁重的处理以及一些 sql。目前,我在需要时打开 sql 连接,运行查询然后关闭它们。这工作正常。该应用程序一直在运行,没有任何问题。随着此应用程序正在完成更多工作,它正在使用更多线程。更多线程意味着更多打开/关闭 SQL 连接。在 SQL 2005 中,这实际上会影响服务器。我的测试服务器每秒处理大约 175 个事务。其中大约 150 个正在主数据库中运行,并且是“ValidateSQLLogin”。
我将更改应用程序,以便每个线程都有自己的连接,然后这个连接在线程周围传递。
所以我的问题是:
如果 SQL 连接对象是在线程中本地创建的,然后通过 ref 传递给另一个类的静态函数,这会不安全吗?
void ThreadA()
{
SqlConnection a = new SqlConnection(....);
MyStaticClass.DoStuff(ref a);
}
void ThreadB()
{
SqlConnection b = new SqlConnection(....);
MyStaticClass.DoStuff(ref b);
}
static void MyStaticClass.DoStuff(ref SqlConnection sql)
{
// Do stuff with sql
}
我最初的想法是这将是不安全的,因为 10 个线程可以同时调用同一个静态函数,每个线程都传递自己的连接对象。
以前,静态函数会打开自己的连接,并在完成后关闭它们。
如果不安全,那么解决此问题的最佳方法是什么。我需要尝试最小化 Sql 连接的打开/关闭。
谢谢
加雷斯