当前位置:编程学习 > C#/ASP.NET >>

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)
        {
            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();
            }
           
           
        }
--------------------编程问答--------------------    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;
        }


你都 return 了 没有关闭连接
--------------------编程问答-------------------- 注意,关闭写在finally里面了。
-_-! --------------------编程问答--------------------
引用 4 楼  的回复:
注意,关闭写在finally里面了。
-_-!


额,刚看到。。。。。。 --------------------编程问答-------------------- 感觉是驱动的问题,我换了ODBC之后,内存用的就比较稳定了。 --------------------编程问答-------------------- System.Threading.Thread.Sleep(100),这句去掉?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,