让我们把它想象成一棵家谱,父亲有孩子,那些孩子有孩子,那些孩子有孩子,等等......所以我有一个递归函数,让父亲使用递归来获取孩子,现在只需打印它们调试输出窗口...但是在某些时候(让它运行一个小时并打印 26000 行之后)它给了我一个 StackOverFlowException。
那么我真的内存不足了吗?嗯?那么我不应该得到“内存不足异常”吗? 在其他帖子上,我发现人们说如果递归调用的数量太多,你可能仍然会得到 SOF 异常......
无论如何,我的第一个想法是将树分解成更小的子树..所以我知道我的根父亲总是有这五个孩子,所以我没有在根传递给它的情况下调用我的方法,而是说好的用根通行证的孩子调用它五次..它帮助我认为..但其中一个仍然很大 - 崩溃时有 26000 行 - 仍然存在这个问题。
应用程序域和在运行时以某种深度创建新进程怎么样? 这有帮助吗?
如何创建我自己的 Stack 并使用它而不是递归方法?这有帮助吗?
这也是我的代码的高级,请看一下,也许这实际上有一些愚蠢的错误导致 SOF 错误:
private void MyLoadMethod(string conceptCKI)
{
// make some script calls to DB, so that moTargetConceptList2 will have Concept-Relations for the current node.
// when this is zero, it means its a leaf.
int numberofKids = moTargetConceptList2.ConceptReltns.Count();
if (numberofKids == 0)
return;
for (int i = 1; i <= numberofKids; i++)
{
oUCMRConceptReltn = moTargetConceptList2.ConceptReltns.get_ItemByIndex(i, false);
//Get the concept linked to the relation concept
if (oUCMRConceptReltn.SourceCKI == sConceptCKI)
{
oConcept = moTargetConceptList2.ItemByKeyConceptCKI(oUCMRConceptReltn.TargetCKI, false);
}
else
{
oConcept = moTargetConceptList2.ItemByKeyConceptCKI(oUCMRConceptReltn.SourceCKI, false);
}
//builder.AppendLine("\t" + oConcept.PrimaryCTerm.SourceString);
Debug.WriteLine(oConcept.PrimaryCTerm.SourceString);
MyLoadMethod(oConcept.ConceptCKI);
}
}