在应用程序中,我有一项任务一直消耗内存,直到它崩溃。使用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
答案 0 :(得分:0)
我不知道您的powerbuilder版本是什么,但请尝试替换IsNull()
CR#304251 PB企业语言 - 任何blob上的Runtime 8.0.3 UpperBound 这不是一个数组,并且大blob上的IsNull函数正在泄漏 记忆。在任何变量上执行它们时,函数都会泄漏。 这是一个错误,但无法在8.0.3补丁中修复。解决方法也是如此 使用实际的数据类型变量。
CR#279144 PB Enterprise DW - 运行时8.0.1点符号的IsNull datawindow列数据正在泄漏内存。
CR#217105 PB企业窗口 - 运行时7.0.2内存使用率上升时 应用程序在开发或运行时(p代码和机器代码)运行时 isnull与任何数据类型一起使用。
[...]
它还增加了以下内容:
Yield()
GarbageCollect()