[英]Dynamics AX 2012 not releasing memory
我正在嘗試將AOT CUS層導出為XPO文件。 參考這個問題 。 我已經回答了上述問題,給出了很好的建議,但是我遇到了“內存不足”的問題。 我做了一些進一步的研究和一些其他的實驗。 這是我用來爬下AOT樹並僅導出屬於“ CUS”層的節點的算法示例。
private void GetAOLHelper(TreeNode baseNode, str baseExportDirectory, int currentLevel, int maxLevel)
{
int cusLayerTest;
int CusLayerValue = 4096;
str ExportFileName = "";
str ExportDirectoryName = "";
TreeNode nextNode;
if (baseNode != null)
{
cusLayerTest = CusLayerValue & baseNode.applObjectLayerMask();
if (cusLayerTest > 0)
{
ExportFileName = baseNode.AOTname() + ".xpo";
this.NodeExport(baseNode, baseExportDirectory, ExportFileName);
}
else
{
if (currentLevel < maxLevel)
{
nextNode = baseNode.AOTfirstChild();
while (nextNode != null)
{
this.GetAOLHelper(nextNode, baseExportDirectory, currentLevel + 1, maxLevel);
nextNode = nextNode.AOTnextSibling();
}
nextNode = null;
}
}
}
}
該算法的關鍵在於:我想爬下AOT樹(從特定節點開始)並導出作為“ CUS”層對象的任何層。 我停止以“最大級別”爬下這棵樹,這意味着我只向樹深處移動了X個級別。 我目前僅在AOT樹的“數據字典”節點上運行此算法。
我面臨的問題是,運行此作業時,AX32.exe進程的內存占用量將近1 GB。 如果我針對多個節點運行此代碼,則內存需求將不斷攀升。 我很好奇為什么算法完成后AX無法釋放內存。 我對Google的研究提出了AX垃圾收集的一些問題。 我想知道是否有一種方法可以在AX中強制垃圾回收? 如果我嘗試導出AOT中的每個節點,則會遇到上述“內存不足”異常。 在關閉AX32.exe客戶端之前,不會釋放內存。
TreeNode對象不會像大多數其他對象一樣被垃圾回收。 您必須自己釋放它。 完成節點操作后,調用treeNodeRelease()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.