我陷入了一个 DXL 问题,非常感谢任何帮助。我必须在很多模块中创建链接,因此必须在编辑模式下打开它们。但是,如果我一次在编辑模式下打开它们,这将使用超过2GB的DOORS内存。所以我决定在编辑模式下打开它们中的每一个以创建链接,然后降级到只读模式。Howewer 这种方式也不会释放内存。
有没有办法释放由编辑模式引起的内存?
感谢您的任何帮助。
完链接后,您可以在循环中保存并关闭模块。
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
}
}
关闭模块将释放资源,这可能不是您要查找的。如果没有,请解释您在程序中尝试做什么。
解决问题的最佳方法可能是一次打开尽可能少的模块,并在完成模块后关闭它们。如果这不能解决您的问题,因为您的两个模块已经消耗了所有内存,您可以切换到 64 位操作系统和 DOORS 客户端(如果可用)并升级到 4、8 或 16GB 的 RAM。
顺便说一句:门的内存消耗是一种痛苦;-)我为旧版本的 DOORS (8.3) 开发了很多 DXL 脚本,具有大量字符串的复杂脚本可能会加剧内存消耗。因此,我鼓励您在脚本直接或间接执行的所有 DXL 脚本中搜索可能的内存泄漏。大多数 DOORS 模块都包含 DXL 属性或列,这些属性或列可能会导致内存分配,如果关闭相应的模块,则不会释放这些内存分配。
所以我用打开的模块声明数组,最后关闭它。
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)
}
}