概述
开发人员可以通过多种方式创建自己的内存泄漏。此处列出了您要避免的大部分内容。
- 使用
CLEAR VARIABLE
变量完成时使用
- 使用
CLEAR SET
集合完成后使用
- 使用
CLEAR NAMED SELECTION
命名选择完成时使用
- 使用
CLEAR LIST
列表完成时使用
- 使用BLOB
SET BLOB SIZE
或使用CLEAR VARIABLE
- 使用数组完成后将数组大小重新调整为 0,或者
CLEAR VARIABLE
不要忘记关闭任何打开的 XML 树,例如XML, DOM,SVG等 ( DOM CLOSE XML
, SVG_CLEAR
)
- 如果使用ODBC总是记得释放连接使用
ODBC_SQLFreeConnect
- 确保清理所有使用的屏幕外区域
例子
以下是开发人员创建的内存泄漏的两个具体示例:
忘记关闭 XML
错误代码:
Repeat
$xmlRef:=DOM Create XML Ref("root")
Until (<>crashed_or_quit)
上面的代码片段会泄漏内存,因为每次调用DOM CREATE XML REF
都会创建一个对内存位置的新引用,而此代码的开发人员忽略了包含释放内存的调用。在 32 位主机应用程序中循环运行它最终会导致崩溃。
固定代码:
DOM CLOSE XML
完成 XML 引用后,可以通过调用轻松修复此代码。
Repeat
$xmlRef:=DOM Create XML Ref("root")
DOM CLOSE XML($xmlRef)
Until (<>crashed_or_quit)
忘记清除列表
错误代码:
Repeat
$listRef:=New list
Until (<>crashed_or_quit)
上面的代码片段会泄漏内存,因为每次NEW LIST
调用都会返回对内存中新位置的引用。开发人员应该使用命令清除引用位置的内存CLEAR LIST($listRef)
。作为奖励,如果列表附加了任何子列表,则可以通过传递*
参数来清除子列表CLEAR LIST($listRef;*)
。
固定代码:
这可以通过调用轻松修复,CLEAR LIST($listRef;*)
如下面的固定示例所示:
Repeat
$listRef:=New list
CLEAR LIST($listRef;*)
Until (<>crashed_or_quit)