概要
開発者が独自のメモリ リークを作成する方法は多数あります。避けたいことのほとんどは、ここにリストされています。
CLEAR VARIABLE
変数の使用が終了したときに使用
CLEAR SET
セットの使用
CLEAR NAMED SELECTION
名前付きセレクションの使用
CLEAR LIST
リストの使用
- BLOBの使用が完了したら、BLOBのサイズを0に変更する
SET BLOB SIZE
か、使用しますCLEAR VARIABLE
- 配列の使用が終了したら、配列のサイズを 0 に変更するか、、 、 など
CLEAR VARIABLE
の開いている XML ツリーを閉じることを忘れないでください( 、)XMLDOMSVGDOM CLOSE XML
SVG_CLEAR
- を使用する場合は、ODBC常に使用して接続を解放することを忘れないでください
ODBC_SQLFreeConnect
- 使用されているオフスクリーン領域を必ずクリーンアップしてください
例
開発者が作成したメモリ リークの 2 つの具体例を次に示します。
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)