新人PGとの書簡 オブジェクトの2種類の解放

 お疲れ様です。Tです。

本日の作業は、
・端末3台のバックアップ作業
・リブ管業務の説明(払出申請書のチェック方法&払出メールの形式)
・ツールの作成
を平行して行いました。

ツールの作成はAPIの確認を取った程度であまり手がつけられておりません。
・32bitOSと64bitOSでファイルの取得フォルダを変更する。
・取得に失敗したファイル名記述したLogをカレントフォルダに出力する。
上記要件には対応しました。

 VBAでのオブジェクトの開放等がまだ理解できていないので、完全な形とはなっていません。
Javaではメモリの開放は明示的に書くことがないので(nullを入れて祈るだけです。)どのように書けばいいか理解できていません。
先日、try catch finallyのfinallyで開放すればよいとアドバイスいただいたので、もう少し調べようと思います。

以上

Tさんへの返事

 Tさん、要件をクリアできてよかったですね。

 オブジェクトの解放に関しては、オブジェクトの解放とシステムリソースの解放をわけて理解してください。

 処理の手順は以下です。

オブジェクト生成
オブジェクト内でシステムリソースを握る
オブジェクト内でシステムリソースを使う
オブジェクト内でシステムリソースを解放する
オブジェクトを解放する

 まず確実にこの順番で処理が進む事を担保する事が必要です。
システムリソースを握った箇所で解放してください。

 以下のように、try catch finally のfinallyブロックで、システムリソースを解放する事を保証してください。

変数の宣言
(システムリソースのハンドル、あるいはAPIオブジェクトを参照する変数)

tryブロック
 システムリソースを握る 例)DBコネクションをオープンする、ファイルをオープンする
 システムリソースを使う

 関数の戻り値を返す
catch
 エラー処理
finally
 変数を使ってシステムリソースを解放

 システムリソースさえ解放していれば、変数自体はスコープを抜けるとVM(仮想マシン)が処理しますので放っておいても良いです。
しかし、その変数がnull かどうかで処理を分岐する事が多々あるので、常にリソース解放後に変数にnullを代入しておくことにしても良いと思います。

 このパターンを必ず守ってほしいのです。さもなくば次のような悲劇に巻き込まれる可能性がありますよ。(次回に続きます)

Posted in

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="">