Memory leaks 如何测量DXL脚本的内存消耗?

Memory leaks 如何测量DXL脚本的内存消耗?,memory-leaks,ibm-doors,Memory Leaks,Ibm Doors,即使在您遇到严重问题之前,找出您的脚本是否存在严重的内存泄漏也可能是您感兴趣的事情。不幸的是,我无法找到如何测量当前堆栈/堆大小或“字符串表”大小(请参阅)。有人能帮忙吗 相关问题:我找到了问题“字符串表”部分的解决方案。Mathias Mamsch提供了一个文件“stringTable.inc”,其中定义了函数printStringTable()。显然,它输出有关表大小的信息,并且可以轻松地进行修补,以提供字符串表字节大小的近似值。最大的内存“泄漏”将是不再使用的开放模块。所以你当然应该关闭这

即使在您遇到严重问题之前,找出您的脚本是否存在严重的内存泄漏也可能是您感兴趣的事情。不幸的是,我无法找到如何测量当前堆栈/堆大小或“字符串表”大小(请参阅)。有人能帮忙吗


相关问题:

我找到了问题“字符串表”部分的解决方案。Mathias Mamsch提供了一个文件“stringTable.inc”,其中定义了函数
printStringTable()
。显然,它输出有关表大小的信息,并且可以轻松地进行修补,以提供字符串表字节大小的近似值。

最大的内存“泄漏”将是不再使用的开放模块。所以你当然应该关闭这些

接下来,您希望将新字符串的生成量保持在最小,因为每个新字符串都会在字符串表中创建一个条目。你可以在这里找到Mathias Mamsch关于这方面的优秀论文:

最后,如果没有删除具有create/delete方法的数据类型,它们可能会占用内存。为了查找未发布的实例,我使用了Mathias Mamsch最初创建的一些内存函数。我返回到他的帖子的链接不再有效,但以下是我使用的功能:

//< Memory Functions [Memory.inc]
/*
Code adapted from forum post by Mathias Mamsch:
https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014830975
*/

int *::+(int *ptr, int ofs)
{
    int *rtn = ptr
    rtn += ofs
    return(rtn)
}

int *::@(int *ptr, int ofs)
{
    int adr = *(ptr + ofs)
    int *rtn = addr_(adr)
    return(rtn)
}

int *mbn(int *ptr)
{
    return(ptr @ 0x74)
}

int *nnn(int *ptr)
{
    return(ptr @ 8)
}

int *ccp()
{
    DB db = create("")
    int *ptr = addr_(db)
    int *rtn = ptr @ 48
    destroy(db)
    return(rtn)
}

int allocatedObjects()
{
    int cnt = 0
    int *mb = mbn(ccp())
    while(!null mb) { mb = nnn(mb) ; cnt++ }
    return(cnt)
}
/
我很确定我更改了原始发布代码中的函数和变量名,所以如果您遇到他的原始代码,请注意这一点。不要问我硬编码的数字。。。马蒂亚斯在帖子里解释过,我记不起解释了

下面是如何使用代码:

//< Test of Memory.inc
/*
*/
pragma encoding, "UTF-8"

#include <stdlib/Memory.inc>

pragma runLim, 0

int numallobj = allocatedObjects()
print numallobj "\n"

Skip skp = null Skip

numallobj = allocatedObjects()
print numallobj "\n"

skp = create()

numallobj = allocatedObjects()
print numallobj "\n"

delete(skp)

numallobj = allocatedObjects()
print numallobj "\n"

/*
Output should be:
0
0
1
0
*/
/