0

可能重复:
代码在迭代 86 时崩溃

static void Job47(Args _args)
{
  str                                  path,stx;
  TreeNodeIterator                     iter;
  TreeNode                             treeNode, treeNodeToRelease;
  Map                                  dictMenuDisplay;
  FormName                             formName;
  MenuItemName                         menuItemName;
  container                            conMenu;
  int                                  i,n;
  ;

  for (n=1;n<=100;n++)

 {
    info(strfmt("iter:%1",n));
    path            ="Menu Items\\Display";
    dictMenuDisplay = new Map(Types::String,Types::Container);
    treenode        = Treenode::findNode(path);
    iter            = treenode.AOTiterator();
    treenode        = iter.next();

    while (treenode)
      {
        formName     = treenode.AOTgetProperty("Object");
        menuItemName = treenode.AOTname();

         if (dictMenuDisplay.exists(formName))
         {
           conMenu = dictMenuDisplay.lookup(formName);
           conMenu = conIns(conMenu,conlen(conMenu)+1,menuItemName);
           dictMenuDisplay.insert(formName,conMenu);
         }


         else
         dictMenuDisplay.insert(formName,[menuItemName]);


        if(treeNodeToRelease && SysTreeNode::isApplObject(treeNode))
         {
           treeNodeToRelease.treeNodeRelease();
           treeNodeToRelease=null;
          }


         if(SysTreeNode::isApplObject(treeNode))
          {
            treeNodeToRelease=treeNode;
          }

         treeNode=iter.next();
    }
}
}

我收到错误“内部运行堆栈溢出”,代码正确运行到第 86 次迭代,求助。垃圾收集器在这里工作正常吗?

谁能帮我知道这是否是因为 X++ 中的垃圾收集器?

到目前为止,我对 GC 的了解是 GC 效率不高,因为一旦不再使用资源,它就不会发生。垃圾收集运行时的一部分是它是不确定的,并且仅在确定需要运行时运行。

在我的代码中必须做什么才能完美地执行它?

4

0 回答 0