【发布时间】:2014-10-31 17:49:51
【问题描述】:
我正在尝试构建一些对象并将它们插入数据库。必须插入的记录数量很大~数百万。 插入是分批完成的。 我遇到的问题是我需要初始化新对象以将它们添加到列表中,最后,我将批量插入到列表的数据库中。因为我正在初始化大量对象,所以我的计算机内存(RAM)被填满了,它有点冻结了一切。 问题是 : 从内存的角度来看,我应该初始化将它们设置为 null 的对象吗? 此外,我正在尝试使用相同的对象引用。我做得对吗?
代码:
QACompleted completed = new QACompleted();
QAUncompleted uncompleted = new QAUncompleted();
QAText replaced = new QAText();
foreach (QAText question in questions)
{
MatchCollection matchesQ = rgx.Matches(question.Question);
MatchCollection matchesA = rgx.Matches(question.Answer);
foreach (GetKeyValues_Result item in values)
{
hasNull = false;
replaced = new QAText(); <- this object
if (matchesQ.Count > 0)
{
SetQuestion(matchesQ, replaced, question, item);
}
else
{
replaced.Question = question.Question;
}
if (matchesA.Count > 0)
{
SetAnswer(matchesA,replaced,question,item);
}
else
{
replaced.Answer = question.Answer;
}
if (!hasNull)
{
if (matchesA.Count == 0 && matchesQ.Count == 0)
{
completed = new QACompleted(); <- this object
MapEmpty(replaced,completed, question.Id);
}
else
{
completed = new QACompleted(); <- this object
MapCompleted(replaced, completed, question.Id, item);
}
goodResults.Add(completed);
}
else
{
uncompleted = new QAUncompleted(); <- this object
MapUncompleted(replaced,uncompleted,item, question.Id);
badResults.Add(uncompleted);
}
}
var success = InsertIntoDataBase(goodResults, "QACompleted");
var success1 = InsertIntoDataBase(badResults, "QAUncompleted");
}
我已经标记了这些对象。我应该像replaced = NULL一样调用它们,还是应该使用构造函数? new QAText() 和 = null 有什么区别?
【问题讨论】:
-
我只是想格式化它,它告诉我你已经完成了。谢谢你:)
-
您的
goodResults和badResults列表的大小正在增加。无论您是在循环内部还是外部实例化变量,您仍然会在这些列表中保留引用。 -
我在将列表插入数据库时清空列表
-
这里没有显示,也没有显示实例化
goodResults和badResults列表的位置。
标签: c# memory memory-management