【问题标题】:SQL Server CE - High Memory Usage - Mass Inserting of RowsSQL Server CE - 高内存使用 - 大量插入行
【发布时间】:2013-08-09 02:33:59
【问题描述】:

我使用这段代码绝对有大量的内存使用。你能告诉我哪里出错了吗?我在这个数据库中添加了近 50k 个条目(我知道它对于 SQL Server CE 来说有点大),但它不应该经常发生。任何帮助表示赞赏。

    public static void AddRow(uint id, string name, uint zone, uint map, string state,
        string type, float x, float y, float z, DataBaseType dbtype)
    {
        string db = null;
        string table = null;
        DateTime dateTime = DateTime.Now.Date;
        using (var con = new SqlCeConnection(connStr))
        {
            using (
                var cmd =
                    new SqlCeCommand(
                        "INSERT INTO " + table + "(Id, Name, Zone, Map, State, Type, X, Y, Z, Create_Date, Update_Date) " +
                        "VALUES (@Id, @Name, @Zone, @Map, @State, @Type, @X, @Y, @Z, @Create_Date, @Update_Date)", con))
            {
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@Id", id);
                cmd.Parameters.AddWithValue("@Name", name);
                cmd.Parameters.AddWithValue("@Zone", zone);
                cmd.Parameters.AddWithValue("@Map", map);
                cmd.Parameters.AddWithValue("@State", state);
                cmd.Parameters.AddWithValue("@Type", type);
                cmd.Parameters.AddWithValue("@X", x);
                cmd.Parameters.AddWithValue("@Y", y);
                cmd.Parameters.AddWithValue("@Z", z);
                cmd.Parameters.AddWithValue("@Create_Date", dateTime);
                cmd.Parameters.AddWithValue("@Update_Date", dateTime);
                con.Open();
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    BotControl.StopBot();
                }
                finally
                {
                    cmd.Dispose();
                }
            }
            con.Close();
            con.Dispose();
        }
   }

【问题讨论】:

  • 你怎么知道你有内存泄漏?
  • 它所在的程序通常在 200-300meg 左右。当我运行这个..它成倍增长。在我杀死它之前,它的内存使用量达到了 1.5gig。
  • 使用已经打开的连接而不是打开 50k 次
  • ErikEJ - 我想过,但我想知道为什么它会导致内存膨胀。我正在关闭和处理,我认为它应该清空内存。我的处理方式错了吗?

标签: c# sql memory-leaks sql-server-ce windows-ce


【解决方案1】:
public static void AddRow(uint id, string name, uint zone, uint map, string state, string type, float x, float y, float z, DataBaseType dbtype)
{
    string db = null;
    string table = null;

    DateTime dateTime = DateTime.Now.Date;
    using (var con = new SqlCeConnection(connStr))
    {
        using (
            var cmd =
                new SqlCeCommand(
                    "INSERT INTO " + table + "(Id, Name, Zone, Map, State, Type, X, Y, Z, Create_Date, Update_Date) " +
                    "VALUES (@Id, @Name, @Zone, @Map, @State, @Type, @X, @Y, @Z, @Create_Date, @Update_Date)", con))
        {
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.AddWithValue("@Id", id);
            cmd.Parameters.AddWithValue("@Name", name);
            cmd.Parameters.AddWithValue("@Zone", zone);
            cmd.Parameters.AddWithValue("@Map", map);
            cmd.Parameters.AddWithValue("@State", state);
            cmd.Parameters.AddWithValue("@Type", type);
            cmd.Parameters.AddWithValue("@X", x);
            cmd.Parameters.AddWithValue("@Y", y);
            cmd.Parameters.AddWithValue("@Z", z);
            cmd.Parameters.AddWithValue("@Create_Date", dateTime);
            cmd.Parameters.AddWithValue("@Update_Date", dateTime);
            con.Open();
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                BotControl.StopBot();
            }
        }
        cmd.Parameters.Clear();
        cmd.Dispose();
        con.Close();
        con.Dispose();
    }

}

【讨论】:

  • 欢迎来到 SO。虽然您的答案可能会解决问题,但您应该花一些时间来解释您的答案。在代码中添加 2 行 sn -p 可能不是每个人都看到或理解的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多