使用相同连接字符串的某些连接会发生什么?

时间:2015-04-26 05:12:22

标签: c# mysql multithreading mysql-connector

假设我有4个MySQL连接和一个connectString(我启用了连接池,我正在使用MySQL自己的MySQL .NET Connector)

protected internal MySqlConnection connection;
protected internal MySqlConnection cnnct1,cnnct2,cnnct3;
protected internal string connectString = "SERVER=" + addressBox.Text + ";DATABASE=" + dbNameBox.Text + ";UID=" + UserBox.Text + ";PASSWORD=" + PassBox.Text + ";";

然后我分配连接

protected internal void connectionMaker()
{
    connection = new MySqlConnection(connectString);
    cnnct1 = new MySqlConnection(connectString);
    cnnct2 = new MySqlConnection(connectString);
    cnnct3 = new MySqlConnection(connectString);
}

我将对这些连接做什么,因为我的应用程序是多线程的,并且所有线程都需要同时访问单个数据库,所以我认为给每个线程提供不同的连接,但是因为它们都是访问的到同一个数据库,甚至是同一个表,所以我认为给每个连接提供相同的连接字符串。

对于添加,每个线程将同时在单个表上的相同列上执行MySqlReader SELECT命令(通过任务并行库),但每个线程将读取不同的行

我的问题是,我正在尝试让我的代码尽可能简单易用,但这是一种安全,良好和正确的做法吗?如果没有,是否有任何简单而安全的方法来做我将要做的事情?

1 个答案:

答案 0 :(得分:0)

如果连接字符串相同,则连接将使用相同的连接池。

最佳做法是每个线程创建,打开和关闭自己的连接,框架将在可能的情况下负责共享资源。

我建议你看一下:https://msdn.microsoft.com/en-us/library/vstudio/8xx3tyca%28v=vs.100%29.aspx

每当用户在连接上调用Open时,pooler将在池中查找可用连接。如果池连接可用,则将其返回给调用者,而不是打开新连接。当应用程序在连接上调用Close时,pooler会将其返回到池化的活动连接集,而不是关闭它。一旦连接返回到池,就可以在下一个Open调用中重用它。