2

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

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

感谢您的帮助。

4

3 回答 3

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
  }
}

关闭模块会释放资源,这可能不是你想要的。如果不是,请解释您在程序中要执行的操作。

于 2012-08-29T19:04:59.527 回答
0

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

顺便说一句:DOORS 的内存消耗令人头疼;-) 我为旧版本(8.3)的 DOORS 开发了很多 DXL 脚本,而具有大量字符串的复杂脚本可能会加剧内存消耗。因此,我鼓励您在所有由您的脚本直接或间接执行的 DXL 脚本中搜索可能的内存泄漏。大多数 DOORS 模块包含 DXL 属性或列,这些属性或列会导致内存分配,如果相应的模块关闭,这些分配将不会被释放。

于 2012-11-08T13:40:44.790 回答
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)
    }
}
于 2015-12-28T11:26:25.610 回答