【问题标题】:What happens if we don't delete object handle? How it affects? How do we see that? - PROGRESS 4GL如果我们不删除对象句柄会发生什么?它如何影响?我们怎么看? - 进步 4GL
【发布时间】:2022-04-05 13:08:30
【问题描述】:

我正在使用以下具有句柄的查询,但即使我删除/不删除句柄的对象,我也看不到任何事情发生。但是每个人都说最后总是删除对象。为什么我们需要删除它们?如果我们不删除它们会发生什么?我们怎么看?

finally:
  if valid-handle(hQueryTest)   then delete object hQueryTest no-error.
  if valid-handle(hQuerytestvalue) then delete object hQuerytestvalue no-error.
end finally.

【问题讨论】:

    标签: openedge progress-4gl


    【解决方案1】:

    OpenEdge 根本没有针对基于句柄的对象的基于引用计数的垃圾收集器。因此查询句柄指向的对象将永远保留在 AVM 的内存中。如果这是在 AppServer 上,则 AppServer 进程的内存消耗可能会略微但稳定地增长。

    OpenEdge 具有可以支持内存管理的 WIDGET-POOL 的概念。

    您可以检查 DynObjects.* 日志条目类型以深入了解基于句柄或基于类的动态对象的生命周期。

    【讨论】:

    • 对于您所询问的情况,这些内存泄漏可能相对较小,但如果您有临时表句柄或内存,泄漏可能是主要的。
    • 虽然看起来很傻,但创建 100 万个查询句柄只用了 44 秒,并设法消耗了 21 GB 的 RAM。程序编辑器很难清理那些乱七八糟的东西。将其减少到 100K 查询句柄,8 秒创建,5 秒清理,2.5 GB RAM。随手清理:0.1 秒,无需额外 RAM。
    猜你喜欢
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 2016-07-30
    相关资源
    最近更新 更多