class - Matlab:类对象的空闲内存

标签 class matlab memory

我最近使用 Matlab 的 OOP 编写了一些代码。在每个类对象中,我将一些测量数据保存为属性并定义评估它们的方法。对于平均数据集,一个单一类对象使用大约 32 MB 的内存。 现在我正在编写一个应该处理这些对象的 GUI。

在第一步中,我从保存的 .mat 文件中加载一组对象(大约 200 个对象,硬盘上 2GB)并将它们存储在 handles 结构中。它们填充 RAM 并在加载时使用大约 6-7 GB。这没问题。

但如果我关闭 GUI,似乎无法释放已用内存。 我尝试了不同的方法但没有成功。

在类的析构函数中将数据字段设置为“空”:

function delete(obj)
    obj.timeVector = [];
    obj.valueVector = [];
end

图中试图释放它_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 之外,还有什么想法吗?

最佳答案

我在 Matlab 错误报告中心找到了答案。似乎从 R2011b 开始就存在。

总结

在 MAT 文件中存储对象会导致内存泄漏并阻止对象类被清除

描述

在 MAT 文件中存储类“MyClass”的实例后,调用清除类可能会导致警告:

警告:“MyClass”类的对象存在。无法清除此类或其任何父类(super class)。

即使您已清除工作区中该类的所有实例,此警告仍然存在。 一种 MAT 文件格式可能会出现警告,而另一种格式则不会。

解决方法

在某些情况下,切换到不同的 MAT 文件格式可能会消除警告。

http://www.mathworks.ch/support/bugreports/857319

编辑: 我尝试使用旧格式进行保存,但这也不起作用。我收到“错误关闭文件”( http://www.mathworks.ch/matlabcentral/answers/18098-error-using-save-error-closing-file )。所以 Matlab 不太支持保存类对象。那时我将不得不忍受内存问题,并在每次使用 GUI 后重新启动 Matlab。

关于class - Matlab:类对象的空闲内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14834040/

相关文章:

Python 列表内存存储

java - Matlab 中的 XPath 不会给出任何结果

php - 常量表达式包含无效操作

java - 为什么这会导致错误 - Java 方法中的类

c++ - 基类和派生类的友元函数

matlab - 如何在 Matlab 中使用谷歌翻译?

java - 在 Java 中带替换的加权采样

php - 传递大变量时如何减少内存使用

java - 使用方法的返回值和保留它们有什么区别?

android - android上的简单XML框架,类属性