首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#应用程序创建多个连接线程,MySQL

C#应用程序创建多个连接线程,MySQL
EN

Stack Overflow用户
提问于 2015-04-06 12:47:05
回答 1查看 2.4K关注 0票数 0

我的C#应用程序导致至少2-3个连续的“线程连接”,如工作台中的MySQL客户端连接选项卡。我仍然无法理解为什么,即使在解冻了执行查询的并行线程之后,我也只能将连续的“连接”线程从4降到2-3。

我甚至检查了执行查询后是否未能关闭连接,找不到缺少的connection.close()。无论如何都不会确定的。我检查了一般日志文件,我只能找到“connect”实例,而不是一个“杀死/关闭”实例。

此外,根据MySQL客户端连接选项卡中的命令字段

  • 线程1号:睡觉1秒,然后恢复到0。
  • 线程2号:睡眠30秒,然后恢复到0。

我可以理解线程2号,因为我有一个计时器,它每30秒触发一次,并在其中运行查询。

注意: Timer 30秒事件是我唯一运行查询和一般日志文件协作的地方。

但是,我不明白为什么要创建2或3个连续连接线程。

编辑(我使用的典型代码)

代码语言:javascript
复制
internal bool id_exists(int id)  
    {
        bool to_return = false;
        string myconnection = "datasource=localhost;port=3306;username=root;password=root";
        MySqlConnection myConn = new MySqlConnection(myconnection);     //Connect to MySql

        string Query = " SELECT * FROM database.table;";
        MySqlCommand cmdDatabase = new MySqlCommand(Query, myConn);     //Command for the database

        MySqlDataReader myReader;
        try
        {
            myConn.Open();
            myReader = cmdDatabase.ExecuteReader();

            while (myReader.Read())
            {
                if (myReader.IsDBNull(myReader.GetOrdinal("id"))) { continue; }
                if (myReader.GetInt32("id") == pre_id) { to_return = true; break; }
            }
        }
        catch (MySqlException ex)
        {
            //Incase case of exception
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error 5: " + ex.Message + "\n\nError loc: " + this.GetType().Name + " : " + System.Reflection.MethodBase.GetCurrentMethod().Name + "\n\nStack Trace:\n" + ex.StackTrace);
        }
        myConn.Close();
        return to_return;
    }

第二版编辑:As @PanagiotisKanavos说ADO.Net有连接池,这会导致创建许多连接线程。很可能,连接字符串的变化是创建多个连接线程的罪魁祸首。

我试着按照这个MySQL Connection will not close链接添加合用= False,现在在运行C#应用程序时,最多只有一个连接线程。我甚至注意到,与合用= True相比,性能下降了。

现在,如果有人能够澄清以下疑问,这将是非常有帮助的:因为我需要有不同的连接字符串,而且连接池正在创建许多连接线程,所以当同时在不同的机器上使用C#应用程序时,它有助于在任何时候达到C#限制。

还有什么其他解决方案可以让我保持连接池,同时避免过快超过max_connection限制吗?

EN

回答 1

Stack Overflow用户

发布于 2015-04-06 13:19:03

而不是:

代码语言:javascript
复制
MySqlConnection myConn = new MySqlConnection(myconnection);

使用“使用”子句:

代码语言:javascript
复制
using (MySqlConnection myConn = new MySqlConnection(myconnection))
{
...
}

用大括号代替"myConn.Close()“行。

我不确定它能解决你的问题,但它会是更好的编码。" using“语句所做的是关闭并在退出使用时释放连接,而不管是否存在异常。

当您使用实现IDispose的类(如SqlConnection类)时,应该始终使用“使用”语句,以确保在处理完该对象时,该对象得到正确的处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29471621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档