c# - 具有相同连接字符串的某些连接会发生什么?

标签 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);
}

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

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

我的问题是,我试图使我的代码尽可能简单和容易,但这是否是一种安全、良好且正确的做法?如果没有,有没有简单而安全的方法来完成我要做的事情?

最佳答案

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

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

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

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

关于c# - 具有相同连接字符串的某些连接会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29874029/

相关文章:

c# - 是否可以包装特定的类或方法并将它们分配给线程?

c# - DataGridViewComboBoxColumn 不会在第一次单击时打开下拉列表

php - 类似 MYSQL 的 2 个表搜索

c++ - pthread 与英特尔 TBB 及其与 OpenMP 的关系?

node.js - 在nodejs中创建workerThread时,它是否利用与nodejs进程运行所在的内核相同的内核?

C#.Net 委托(delegate)

c# - 让 Mono 和 Firebird Embedded 在 Linux 上运行

mysql - 选择不符合此联接条件的行

mysql - 错误 1064 (42000) - INSERT ... SELECT 查询中的 MySQL 错误

java - Java Web 应用程序和 Web 服务之间的线程间通信