2013-10-18 85 views
1

在我的应用程序中,我使用来自dev.mysql.com的Mysql.Data连接器写入我的mysql数据库,并且我想最大化性能,所以我不想打开很多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连接器在不同线程之间共享一个连接?

回答

4

什么是使用dev mysql连接器在不同线程之间共享一个连接的正确方法?

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

连接应汇集,所以当你打开一个新的连接,它不会实际上打开一个新的连接,它只是从池中抓取一个开放的连接。

因此,没有理由在线程之间共享这样的长期连接。只需为每个逻辑事务的作用域创建一个新连接,并让连接池负责其余部分。

+0

不是最大大小1的连接池究竟是OP在寻找什么?池的想法是不为每个事务创建一个新的连接,所以我有点困惑你在推荐什么 –

+1

@MiserableVariable'MySqlConnection'类型本身*已经*维护一个连接池。他不需要在现有机制之上重新实现连接池机制。 – Servy

+0

哦!我不知道'MySqlConnection'。在这种情况下,你写道创建每个事务的新连接是最好的方法 –

相关问题