【发布时间】:2014-12-23 13:12:53
【问题描述】:
我基本上有一个包含邮政编码区域的列表框,即:AE、CW、GU 等。
用户选择此选项,然后发生回发 - 构建 sql 语句并执行数据库查询操作,并将结果返回到名为 tempdata 的数据表。
到目前为止一切顺利。然后我需要遍历这个数据表并将记录复制到我的主视图状态数据表,这是谷歌地图 api 的数据源。
DataTable tempstore = GetData(querystring, "");
//check tempstore has rows otherwise add defaultcust as default otherwise map will be blank
if (tempstore.Rows.Count == 0)
{
tempstore = GetData("WHERE CUSTCODE=='CD344'", "");
infoalert.Visible = true;
infoalert.InnerHtml = "No Results Returned For Selection";
}
foreach (DataRow row in tempstore.Rows)
{
dtpc.ImportRow(row);
dtpc.AcceptChanges();
}
//database command
using (OleDbConnection con = new OleDbConnection(conString))
{
using (OleDbCommand cmd = new OleDbCommand(query))
{
using (OleDbDataAdapter sda = new OleDbDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
sda.Fill(dt5);
}
}
}
所以我的主要数据表可以随着用户添加更多邮政编码而不断增长。但是,当它达到大约 500 行左右时,我只会在回发时获得巨大的内存峰值,然后它会恢复下来。我的 ram 使用量从 2gb 变为 3gb,如果选择了更多的邮政编码,它会最大化内存并使我的电脑崩溃。
如果我删除:
dtpc.Importrow(row);
内存峰值完全消失,显然是因为主数据表没有行。我以为你只有在有数千行时才会遇到内存问题?
任何帮助将不胜感激。
谢谢你
【问题讨论】:
-
虽然这可能无法解决您的内存泄漏问题,但如果将 dtpc.acceptchanges 放在循环之外,您可以获得性能提升。在导入所有行之后调用一次而不是在每一行之后调用一次更便宜。
-
谢谢,这对内存问题没有帮助:(
-
把你的代码格式化到左边
标签: c# .net memory-management memory-leaks datatable