2013-06-26 3 views
0

Обновление: Проверьте принятое решение. Проблема не имела отношения к свойствам класса.Matlab clear class property

У меня есть следующая проблема в Matlab и ничего не найдено на google или здесь. У меня есть класс ручки, как это:

classdef myClass < handle 
    properties 
    hugeCellArray 
    otherVariables 
    end 
    ... 
end 

Я как создание экземпляр myObj = myClass(data); Теперь, если я стараюсь: clear myObj.hugeCellArray это не проясняет свойство вообще. Если я попробую myObj.hugecellArray = [];, он установит свойство как [], но память по-прежнему выделена! Так кажется, что я не могу избавиться от огромной переменной в классе, если я не очистил весь класс? Спасибо заранее!

Редактировать: (Уточнение) Моя проблема в памяти. Я не хочу фактически удалить свойство класса, я хочу освободить его память.

+0

Что вы подразумеваете под «памятью по-прежнему выделяется»? – Shai

+0

Matlab все еще использует ~ 10 ГБ. Это означает, что он не освободил память (?). Это означает, что если я вызову другую функцию, которая нуждается в памяти, у меня закончится нехватка памяти и начнется запись для обмена. – Stefan

+1

вы уверены, что у вас нет закрытия или что-то такое, что есть еще ссылки на собственность где-то? установка его на пустой массив должна вернуть память. Другое объяснение состоит в том, что ваша память стала слишком фрагментированной. – Amro

ответ

1

Решения по Amro:

Видимо проблема, кажется, в клеточных массивах. Они фрагментируют мою память, и впоследствии ее нельзя использовать повторно. Только обходной путь, кажется, объединяет массив ячеек в один огромный массив и сохраняет вкладки, где первоначально был начат каждый подмассива.

+0

+1 как и обещал. – Amro

4

Вы не можете «удалить» свойство объекта, не очистив весь объект.

Если ваша забота о памяти, то, что вы пытались делает действительно четкую выделенную память:

myObj = myClass(); 
myObj.prop = rand(5000); 
memory 
myObj.prop = []; 
memory 
+0

У меня нет команды «memory» под linux, поэтому я не могу это доказать, но глядя на память, используемую Matlab в диспетчере процессов linux до и после этой команды, использует тот же самый объем памяти. – Stefan

+0

О, извините, я забыл, что 'memory' работает только в Windows. возможно, вы можете попробовать предложения отсюда: http://stackoverflow.com/q/4762044/97160 – Amro

+0

Он работает в моей Matlab на Win. Я вижу, что память освобождается также с помощью диспетчера задач Windows. –