现象:通过任务管理器查看mysqld进程中线程数起始为24左右,运行下述测试程序,线程增加100左右(测试电脑4核,运行过程cpu利用率100%),程序执行结束,线程依然保持124左右,关闭程序 线程降低至40左右。另外程序运行过程内存也会随着程序跑起来而增加,关闭而减少,但是减少到的值大于mysqld进程起来时的值
问题:程序执行结束,线程依然保持124左右,怀疑是mysql线程缓存引起(另外测试过,下述程序进程在不关闭的情况下 执行完100个线程后 再重复执行这100个线程,任务管理器中内存cpu均不变),但是为什么测试程序关闭后线程会马上降下来,程序中已经有显示的关闭连接,还是说本人关闭的方式有问题?哪位同僚能帮忙解答一下。
程序代码如下
问题:程序执行结束,线程依然保持124左右,怀疑是mysql线程缓存引起(另外测试过,下述程序进程在不关闭的情况下 执行完100个线程后 再重复执行这100个线程,任务管理器中内存cpu均不变),但是为什么测试程序关闭后线程会马上降下来,程序中已经有显示的关闭连接,还是说本人关闭的方式有问题?哪位同僚能帮忙解答一下。
程序代码如下
for (int i = 0; i < 100; i++)
{
Thread t = new Thread(()=>
{
int baseInt = i;
for (int index = 0; index < 100; index++)
{
MySql.Data.MySqlClient.MySqlConnection conn = null;
MySql.Data.MySqlClient.MySqlCommand cmd = null;
MySql.Data.MySqlClient.MySqlDataReader reader = null;
try
{
conn = new MySql.Data.MySqlClient.MySqlConnection("Server=127.0.0.1;Port=6666;Database=unit;Uid=root;Password=;Pooling=true;Min Pool Size=0;Max Pool Size=1000");
cmd = conn.CreateCommand();
conn.Open();
cmd.CommandText = "insert into tbtable(param1) value(""system"");";
reader = cmd.ExecuteReader();
while (reader.Read())
{
// process the results
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
if (reader != null)
{
reader.Close();
reader.Dispose();
reader = null;
}
if (cmd != null)
{
cmd.Dispose();
cmd = null;
}
if (conn != null)
{
conn.Close();
conn.Dispose();
conn = null;
}
}
}
});
t.Start();
}
题外话:本帖分数不多见谅
解决方案:20分
假如使用了数据库连接池,则会导致这种现象。