Matlab clear类属性

Matlab clear类属性,matlab,class,oop,memory-management,Matlab,Class,Oop,Memory Management,更新:检查已接受的解决方案。问题与类属性无关。 我在Matlab中有以下问题,在google或这里找不到任何东西。我有这样一个句柄类: classdef myClass < handle properties hugeCellArray otherVariables end ... end classdef myClass

更新:检查已接受的解决方案。问题与类属性无关。

我在Matlab中有以下问题,在google或这里找不到任何东西。我有这样一个句柄类:

classdef myClass < handle
  properties
    hugeCellArray
    otherVariables
  end
  ...
end
classdef myClass
我将其实例化为
myObj=myClass(数据)
现在,如果我尝试:
清除myObj.hugeCellArray
它根本没有清理财产。如果我尝试
myObj.hugecellArray=[]它确实将属性设置为[],但内存仍然被分配!
所以,除非我清除了整个类,否则我似乎无法去除一个类中的巨大变量?
提前谢谢

编辑:(澄清)我的问题是记忆力。我不想实际删除class属性,我想释放它的内存。

如果不清除整个对象本身,就不能“删除”对象的属性

如果您关心的是内存,那么您尝试的确实会清除分配的内存:

myObj = myClass();
myObj.prop = rand(5000);
memory
myObj.prop = [];
memory
如果不清除整个对象本身,则无法“删除”对象的属性

如果您关心的是内存,那么您尝试的确实会清除分配的内存:

myObj = myClass();
myObj.prop = rand(5000);
memory
myObj.prop = [];
memory
Amro的解决方案:

显然,问题似乎出在细胞阵列中。他们把我的记忆分割成碎片,以后就不能再使用了。唯一的解决办法似乎是将单元阵列连接成一个巨大的阵列,并记录每个子阵列最初的起始位置

Amro的解决方案:


显然,问题似乎出在细胞阵列中。他们把我的记忆分割成碎片,以后就不能再使用了。唯一的解决办法似乎是将单元阵列连接成一个巨大的阵列,并记录每个子阵列最初的起始位置

也许你想找到这样的答案:

d.a = 3;
d.b = 4;
c = 3;
clear d.a

d.b和c仍然存在。

也许你想找到如下答案:

d.a = 3;
d.b = 4;
c = 3;
clear d.a

d.b和c仍然存在。

你所说的“内存仍然被分配”是什么意思?Matlab仍然使用~10GB。这意味着它没有释放内存(?)。这意味着,如果我调用另一个需要内存的函数,我将耗尽内存并开始写入swap。你确定你没有闭包或类似的东西,以至于在某个地方仍然存在对该属性的引用吗?将其设置为空数组应可回收其内存。。另一种解释是,你的内存变得太零碎了。如果是这样的话,恐怕一旦内存变得太零碎了,除了重新启动MATLAB,你就无能为力了。。例如,见:,我想是的。相反,分配大块应该可以缓解这个问题。请记住,MATLAB需要连续内存来存储数值数据。您所说的“内存仍在分配”是什么意思?MATLAB仍在使用~10GB。这意味着它没有释放内存(?)。这意味着,如果我调用另一个需要内存的函数,我将耗尽内存并开始写入swap。你确定你没有闭包或类似的东西,以至于在某个地方仍然存在对该属性的引用吗?将其设置为空数组应可回收其内存。。另一种解释是,你的内存变得太零碎了。如果是这样的话,恐怕一旦内存变得太零碎了,除了重新启动MATLAB,你就无能为力了。。例如,见:,我想是的。相反,分配大块应该可以缓解这个问题。请记住,MATLAB需要连续内存来存储数字数据。我在linux下没有“内存”命令,因此我无法证明这一点,但查看linux process manager中MATLAB在该命令前后使用的内存,它使用的内存量是完全相同的。哦,对不起,我忘记了
内存
仅在Windows上可用。也许你可以尝试一下这里的建议:它在我的matlab中运行。我可以看到,使用windows任务管理器也可以释放内存。我在linux下没有“内存”命令,因此我无法证明这一点,但看看linux进程管理器中matlab在该命令前后使用的内存,它使用了完全相同的内存量。哦,对不起,我忘了
内存
仅在windows上工作。也许你可以尝试一下这里的建议:它在我的matlab中运行。我可以看到,使用windows任务管理器也可以释放内存。