我正在使用线程池进行一些繁重的处理以及一些sql.目前我在需要时打开sql连接,运行查询然后关闭它们.这很好用.该应用程序一直运行没有问题.随着这个应用程序正在做更多的工作,它正在使用更多的线程.更多线程意味着更多SQL连接的打开/关闭.在SQL 2005中,这实际上会破坏服务器.我的测试服务器大约每天执行175次事务.其中大约150个正在master数据库中运行,并且是"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连接的打开/关闭.
谢谢
加雷思
静态函数的参数与静态字段不同.每次执行静态函数都将使用不同的连接副本.您甚至不需要将参数作为参考(仅当您想要更改它们时才需要参考参数).