我有一个多线程C#2.0应用程序,其中每个线程将一些结果写入SQL Server 2000数据库表.只有一个直接的INSERT命令,没有其他逻辑.
我的问题是 – 我是否需要锁定将结果写入数据库的方法?目前有一个锁,但我怀疑它正在减慢应用程序的速度.
谢谢!
解决方法:
不,你不需要任何锁,但你需要为每个插入创建一个新的SqlConnection
.文档说SqlConnection的实例成员不是线程安全的.
编辑2:通过在这种情况下不线程安全意味着你不能在几个线程之间共享一个SqlConnection.但是如果每个线程都有自己的SqlConnection,那么插入就可以了.数据库本身遵循ACID属性,因此尝试插入数据的并发连接是安全且定义良好的.
编辑:但是如果您无法弄清楚为什么它首先以这种方式编写,那么在删除奇怪的代码时应该小心.它很容易产生某种副作用,通过查看数据库代码来解决这个问题是非常重要的.但另一方面,如果代码是由粘贴了通过谷歌发现的随机代码的人编写的,那么最好的办法就是重写代码.