ado.net mysql 闪退_c# - MySqlConnection ADO.Net CPU使用率过高 - 堆栈内存溢出

我有一个多线程应用程序,其中N个线程正在访问MySQL数据库。 每个查询将创建自己的MySqlConnection实例,以避免共享MySqlDataReader 。 但是,我们遇到数据库服务器的CPU高峰。 我已经尝试运行SHOW PROCESSLIST,但是结果中没有慢查询。 我怀疑根本原因是线程如何处理连接。

以下是我的查询方法示例。

public List GetAlertConfigByDeviceID(string deviceID)

{

List configurations = new List();

try

{

using (MySqlConnection dbConnection = new MySqlConnection(WinAlerterConfig.WebConnectionString))

{

dbConnection.Open();

using (MySqlCommand dbCommand = dbConnection.CreateCommand())

{

dbCommand.CommandText = StoredProcedures.SqlGetAlertCfgDetailByDeviceID;

dbCommand.Parameters.Add(new MySqlParameter("DeviceID", deviceID));

using (MySqlDataReader dbResultSet = dbCommand.ExecuteReader())

{

if (dbResultSet.HasRows)

{

while (dbResultSet.Read())

{

configurations.Add(new Configuration()

{

ConfigID = dbResultSet.GetUInt64Safe(0),

AlertType = dbResultSet.GetUInt64Safe(1),

ZoneID = dbResultSet.GetUInt64Safe(2),

Timeout = dbResultSet.GetInt64Safe(3),

DeviceID = dbResultSet.GetStringSafe(4),

FromZoneID = dbResultSet.GetUInt64Safe(5),

OtherZoneAlert = dbResultSet.GetBooleanSafe(6),

Remarks = dbResultSet.GetStringSafe(7)

});

}

}

dbResultSet.Close();

dbResultSet.Dispose();

}

dbCommand.Dispose();

}

dbConnection.Close();

dbConnection.Dispose();

}

}

catch (MySqlException ex)

{

Logger.LogErrorLine("GetAlertConfigByDeviceID: {0} {1} {2}", ex.Message, Environment.NewLine, ex.StackTrace);

}

catch (Exception ex)

{

Logger.LogErrorLine("GetAlertConfigByDeviceID: {0} {1} {2}", ex.Message, Environment.NewLine, ex.StackTrace);

}

return configurations;

}

我还添加了“ polling = true;” 在我们的连接字符串中。 因此,我假设MySQL或ADO.net将处理连接池。

我的方法做错了吗? 连接池是否已经由ADO.net处理?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值