当前位置:  开发笔记 > 编程语言 > 正文

C#关于线程安全的问题

如何解决《C#关于线程安全的问题》经验,为你挑选了1个好方法。

我正在使用线程池进行一些繁重的处理以及一些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连接的打开/关闭.

谢谢

加雷思



1> Grzenio..:

静态函数的参数与静态字段不同.每次执行静态函数都将使用不同的连接副本.您甚至不需要将参数作为参考(仅当您想要更改它们时才需要参考参数).

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有