C# SQL Server CE-高内存使用率-大量插入行
我有绝对大量的内存使用此代码。你能告诉我哪里出了问题吗?我正在向这个数据库中添加近50k个条目(我知道这对于SQLServerCE来说有点大),但它不应该经常发生。感谢您的帮助C# SQL Server CE-高内存使用率-大量插入行,c#,sql,memory-leaks,sql-server-ce,windows-ce,C#,Sql,Memory Leaks,Sql Server Ce,Windows Ce,我有绝对大量的内存使用此代码。你能告诉我哪里出了问题吗?我正在向这个数据库中添加近50k个条目(我知道这对于SQLServerCE来说有点大),但它不应该经常发生。感谢您的帮助 public static void AddRow(uint id, string name, uint zone, uint map, string state, string type, float x, float y, float z, DataBaseType dbtype) {
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-300兆左右。当我运行此。。它呈指数增长。在我杀死它之前,它的内存使用量达到了1.5g。使用一个已经打开的连接,而不是打开50k timesErikEJ-我想了一下,但我想知道为什么它会导致内存膨胀。我正在关闭和处理,我认为它应该清空内存。我这样做是不是错了?欢迎来到这里。虽然你的答案可以解决问题,但你应该花些时间来解释你的答案。在代码段中添加两行可能不是每个人都能看到或理解的。
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();
}