TOPページへ戻る  PCページへ戻る  TreeView一覧へ戻る

メモリリークの修正

TShellTreeView(を始めShellCtrl.pasにあるコンポーネント)には、Destroyし忘れに起因するメモリリークがあります(Delphi XE2では修正されています)。
(参考:[Borland Developer Network] QC#8322

ShellCtrls.pasを開き、 下のようにDestroyデストラクタを追加して解放し忘れているFRootFolderをFreeすることで修正できます。


  public
    destructor Destroy; override;	// publicにDestoryを追加

destructor TCustomShellTreeView.Destroy;	// 実際のコード
begin
  if Assigned(FRootFolder) then
    FRootFolder.Free;			// 解放し忘れのFRootFolderを解放
  inherited;
end;

以下の記述は私がTShellTreeViewをCreateして使っていたことが原因であり、パッケージとしてインストールし、ツールパレットの「Sample」からドラッグ&ドロップで設計時に使えるようにしている方は不要です。

実際にメモリリークを防ぐには、上述のコードを追加するだけでは不十分です。TShellTreeViewを使用する アプリケーションのOnCloseイベントでTShellTreeViewをFreeする必要があります。

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
try

finally
    FreeAndNil(ShellTreeView1);		// 必ずFreeするようにtry〜finally保護ブロックでShellTreeViewを破棄
  end;
end;

TOPページへ戻る  PCページへ戻る  TreeView一覧へ戻る