DXL从编辑模式切换到读取模式后释放内存?

时间:2012-05-25 15:02:47

标签: memory-management ibm-doors

我陷入了一个DXL问题,非常感谢任何帮助。我必须在很多模块中创建链接,因此必须在编辑模式下打开它们。但如果我一次在编辑模式下打开它们,那将使用超过2GB的DOORS内存。所以我决定在编辑模式下打开它们以创建链接然后降级到只读模式。但是这种方式也不会释放记忆。

有没有办法释放由编辑模式引起的内存?

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

添加完链接后,您可以在循环中保存并关闭模块。

Folder f = current
Item i
Module mod

for i in f do
{
  if(type(i) "" == "Formal")
  {
    mod = edit(fullName(i) "", false)

    //process and add links here

    save mod
    close mod
  }
}

关闭模块将释放资源,这可能不是您正在寻找的。如果没有,请解释您在计划中尝试做什么。

答案 1 :(得分:0)

解决问题的最佳机会可能是尽可能少地打开模块,如果你已完成它们就关闭它们。如果这不能解决您的问题,因为您的两个模块已占用所有内存,您可以切换到64位操作系统和DOORS客户端(如果可用)并升级到4,8或16GB的RAM。

BTW:DOORS的内存消耗很痛苦;-)我为DOORS的旧版本(8.3)开发了相当多的DXL脚本,带有大量字符串的复杂脚本可能会加剧内存消耗。因此,我建议您在脚本直接或间接执行的所有DXL脚本中搜索可能的内存泄漏。大多数DOORS模块都包含DXL属性或列,这些属性或列可能导致内存分配,如果关闭相应的模块,则不会释放这些内存分配。

答案 2 :(得分:0)

所以我用开放模块声明Array,最后关闭它。

int sizeOfOpenModules = 0
Array openModules = create (1,1)

当我打开新模块时:

 put (openModules, m, 1, sizeOfOpenModules)

当想要获得其中一个开放模块时:

Module m = (Module get (openModules, 1, i))

最后:

void closeAllOpenModules () {
    for (i = 0; i < sizeOfOpenModules; i++) {
        Module m = get (openModules, 1, i)
        save (m)
        close (m)
    }
}