【问题标题】:powerbuilder memory not freedpowerbuilder 内存未释放
【发布时间】:2016-11-28 11:57:59
【问题描述】:

在应用程序中,我有一个任务会一直消耗内存直到崩溃。用 processExplorer 观察我发现以下函数每次调用时分配大约 50MB(它被调用 30 次)。函数退出时不会释放此内存,即使我调用 GarbageCollect。请注意,函数调用如下:

Of_IsOrario, Of_GetCell, Of_GetRowCount, Of_GetColCOunt 

只返回值(不分配内存)

long ll_file, i, j, ll_bytes, ll_fileWithTitles 
double ld_value 
string ls_line 
n_cst_string str 



ll_fileWithTitles = FileOpen( as_fileName + "text.txt", LineMode!, Write!, Shared!, Replace!, EncodingAnsi!) 
ll_file = FileOpen(as_fileName, LineMode!, Write!, Shared!, Replace!, EncodingAnsi!) 

if ll_file < 0 then 
        MessageBox("Σφάλμα", "Could not create file " + as_fileName) 
        return false 
end if 

for i = 1 to Of_GetColCount() 
        if in_tasks[i].Of_IsOrario() then 
                ls_line += "~tO" + in_Tasks[i].is_symbol 
        else 
                ls_line += "~t" + in_Tasks[i].is_symbol 
        end if                 
next 
FileWrite(ll_fileWithTitles, ls_line) 

for i = 1 to Of_GetRowCount() 
        ls_line = "" 
        for j = 1 to Of_GetColCount() 
                ld_value = -Of_GetCell(i, j) 

                if ls_line <> "" then ls_line += "~t" 
                ls_line += string(ld_value) 
        next 
        ls_line = str.Of_GlobalReplace(ls_line, ",", ".") 
        if IsNull(ls_line) then 
                ls_line = ls_line 
        end if 
        ll_bytes = FileWrite(ll_file, ls_line) 
        ls_line = string(in_matrix[i].il_agentId) + "~t" + ls_line 
        ll_bytes = FileWrite(ll_fileWithTitles, ls_line) 
next 

FileClose(ll_file) 
FileClose(ll_fileWithTitles) 

return true 

【问题讨论】:

  • Powerbuilder 版本?
  • 为什么你有if IsNull(ls_line) then ls_line = ls_line...这个结构。它有什么改变吗?我能理解ls_line = ""

标签: memory-management powerbuilder


【解决方案1】:

我不知道你的powerbuilder是什么版本,但是尝试替换IsNull()

CR#304251 PB 企业语言 - 任何 blob 上的运行时 8.0.3 UpperBound 这不是一个数组,并且大 blob 上的 IsNull 函数正在泄漏 记忆。对任何变量执行函数时,这些函数都会泄漏。 这是一个错误,但无法在 8.0.3 补丁中修复。解决方法也是 使用实际的数据类型变量。

CR#279144 PB Enterprise DW - 运行时 8.0.1 IsNull 将点表示法转换为 datawindow 列数据正在泄漏内存。

CR#217105 PB Enterprise Window - Runtime 7.0.2 内存使用量上升时 应用程序在开发或运行时(p 代码和机器代码)中运行,当 isnull 与 any 数据类型一起使用。

[...]

它还添加了以下内容:

Yield()
GarbageCollect()

【讨论】:

    猜你喜欢
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2015-06-21
    • 2012-05-22
    • 1970-01-01
    • 2014-06-27
    相关资源
    最近更新 更多