c#写入mysql的内存泄露问题
我在用c#向mysql写数据的时候遇到了一个奇怪的问题。我的程序是循环写入mysql。在windows xp下面,程序不会有任何问题。但在windows 2003, windows 2008和windows 7下面,每次执行一次插入语句,程序的内存会增长8K。我分别用了MySQLDriverCS.dll和MySql.Data两个mysql驱动,都出现了这个问题。
不知道各位有没有遇到过这样的问题,是怎么解决的呢? --------------------编程问答-------------------- 确定你每次都及时关闭数据库连接了吗?还有释放相关资源 --------------------编程问答-------------------- 应该是关闭了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data;
using MySql.Data.MySqlClient;
namespace TextManager
{
class MysqlDao
{
public MySqlConnection conn;
private string connStr = "server=192.168.163.127;user=root;database=road_lab;port=3306;password=jj;Charset=utf8";
public MysqlDao()
{
conn = new MySqlConnection(connStr);
}
public int ExecNonQuery(string sql)
{
MySqlCommand cmd = null;
try
{
conn.Open();
cmd = new MySqlCommand(sql, conn);
int ret = cmd.ExecuteNonQuery();
return ret;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
cmd.Dispose();
conn.Close();
}
return -1;
}
public List<TextDanweiEntity> QueryExperData()
{
List<TextDanweiEntity> list = new List<TextDanweiEntity>();
try
{
conn.Open();
string sql = "select text, danwei from exper_data";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine();
Console.WriteLine(rdr[1].ToString());
TextDanweiEntity entity = new TextDanweiEntity();
entity.Text = rdr[0].ToString();
entity.Danwei = rdr[1].ToString();
list.Add(entity);
}
rdr.Close();
conn.Close();
cmd.Dispose();
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
return list;
}
}
}
private void Write2Mysql(List<TextDanweiEntity> list)--------------------编程问答-------------------- public int ExecNonQuery(string sql)
{
MysqlDao dao = new MysqlDao();
try
{
string sql = "delete from exper_data";
dao.ExecNonQuery(sql);
foreach (TextDanweiEntity inst in list)
{
sql = string.Format("insert into exper_data (danwei, text) values ('{0}', '{1}')", inst.Danwei, inst.Text);
Console.WriteLine(sql);
dao.ExecNonQuery(sql);
System.Threading.Thread.Sleep(100);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
dao.conn.Dispose();
}
}
{
MySqlCommand cmd = null;
try
{
conn.Open();
cmd = new MySqlCommand(sql, conn);
int ret = cmd.ExecuteNonQuery();
return ret;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
cmd.Dispose();
conn.Close();
}
return -1;
}
你都 return 了 没有关闭连接
--------------------编程问答-------------------- 注意,关闭写在finally里面了。
-_-! --------------------编程问答--------------------
额,刚看到。。。。。。 --------------------编程问答-------------------- 感觉是驱动的问题,我换了ODBC之后,内存用的就比较稳定了。 --------------------编程问答-------------------- System.Threading.Thread.Sleep(100),这句去掉?
补充:.NET技术 , C#