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 が実行されないため、GC は効率的ではないということです。ガベージ コレクトされたランタイムの一部は、非決定論的であり、実行する必要があると判断した場合にのみ実行されることです。

コードを完璧に実行するには、コードで何をする必要がありますか?

4

0 に答える 0