c# - 如何在多个线程之间共享一个 mysql 连接?

标签 c# mysql multithreading

在我的应用程序中,我使用来自 dev.mysql.com 的 Mysql.Data 连接器写入我的 mysql 数据库,我想最大化性能,所以我不想打开很多 MySql 连接。但最终当我尝试像这样使用一个全局静态连接时:

MySqlConnection connect = new MySqlConnection(connectionString);

connect.Open();
StaticData.mysqlConnect = connect;

...


// in my threads
lock (StaticData.mysqlConnect)
{
  foreach (Object param in records)
  {
      using (MySqlCommand command = conn.CreateCommand())
      {
        command.CommandText = "some request";
        //...                   
        command.ExecuteNonQuery();  
      }
  }
}

我遇到了 System.Threading.SynchronizationLockException。所以我的问题是:使用 dev mysql 连接器在不同线程之间共享一个连接的正确方法是什么?

最佳答案

whats the proper way to share one connection between different threads using dev mysql connector?

不要。在每个线程上有不同的连接。

连接应该被池化,所以当你打开一个新连接时,它不会实际上打开一个新连接,它只会从池中获取一个打开的连接。

因此,没有理由在线程之间共享如此长生命周期的连接。只需为每个逻辑事务的范围创建一个新连接,让连接池处理其余部分。

关于c# - 如何在多个线程之间共享一个 mysql 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19458633/

相关文章:

c++ - 定义函数调用中线程访问的全局常量字符串变量

ios - Swift 中的线程队列

c# - 构建一个位图,用较小的图像填充它

mysql - 通用 SQL/MySQL 将行转换为列

java - 在单独的循环上提取draw()方法(PApplet作为JADE代理)

php - MySQL/PHP 输出不符合预期

mysql - linux下安装RMySQL时如何选择MySQL版本

c# - 让 SOMA Ads 在 XNA 项目中工作?

c# - 如何比较具有不同 ReflectedType 值的相同 PropertyInfo?

c# - 如何抑制 thread.abort() 错误 C#?