私は最近、Matlab の OOP を使用していくつかのコードを書きました。各クラス オブジェクトで、いくつかの測定データをプロパティとして保存し、それらを評価するメソッドを定義します。平均的なデータ セットでは、1 つのクラス オブジェクトが約 32 MB のメモリを使用します。現在、これらのオブジェクトを処理する GUI を作成しています。
最初のステップでは、保存された .mat ファイル (約 200 個のオブジェクト、ハードディスクに 2GB) から一連のオブジェクトを読み込み、handles 構造体に格納します。ロードすると、RAM がいっぱいになり、約 6 ~ 7 GB を使用します。これは問題ありません。
しかし、GUI を閉じると、使用済みメモリを解放できないようです。さまざまなアプローチを試みましたが、成功しませんでした。
クラスのデストラクタでデータ フィールドを「空」に設定します。
function delete(obj)
obj.timeVector = [];
obj.valueVector = [];
end
figure_CloseRequestFcn でそれを解放しようとしています:
function figure_CloseRequestFcn(hObject, eventdata, handles)
handles.data = [];
handles = rmfield(handles,'data');
guidata(hObject,handles);
clear handles;
pack; %Matlab issues a warning, that pack could only
%be used from the command line, but that did
%not work either
delete(hObject);
end
GUIで作業した後、毎回Matlabを閉じる以外に、何かアイデアはありますか?