Как избежать использования Matlab экспоненциального времени при создании массива объекта дескриптора в качестве свойства объекта
Мне кажется, что при созданиимассив простых объектов дескриптора в шкалах времени Matlab о линейной, Однако, если я создам точно такой же массив ихранить его как свойство объекта, время масштабируется экспоненциально - поэтому программа становится очень медленной, когда создается много объектов.
Мой вопрос: почему это происходит и как этого можно избежать? Правильно ли реализовано предварительное распределение свойств объекта в моем коде или есть фундаментальная проблема с тем, как Matlab обрабатывает эти вещи?
Я написал простой тест, чтобы проиллюстрировать проблему:
Код простого Объекта:
classdef SomeSimpleObject < handle
% SomeSimpleObject defines an Object that has one property
properties
property=0;
end
methods
function SimpleObj=SomeSimpleObject()
if nargin~=0
SimpleObj.property=1;
end
end
end
end
Использование следующего скрипта для создания массива этих простых объектов размером 1x10.000 в соответствии с профилировщиком на моем компьютере занимает 0,4 секунды:
for n=10000:-1:1 % counting backwards for Memory pre-allocation
ObjectList(n)=SomeSimpleObject();
end
Однако выполнение одного и того же в конструкторе класса и сохранение массива из 10.000 объектов как свойства занимает 59 секунд, и это быстро ухудшается. Попробуйте, создав объект из этого класса (например,а = HostingObject)
classdef HostingObject < handle
% This Objects Hosts a List of Objects that are created in the
% constructor
properties
ObjectList=SomeSimpleObject
end
methods
function obj=HostingObject()
for n=10000:-1:1 % counting backwards for Memory pre-allocation
obj.ObjectList(n)=SomeSimpleObject();
end
end
end
end
В поисках ответа я наткнулся на дискуссию о распределении памяти Matlab ивывоз мусора, Ответ Михаила (также не связанный напрямую с моим вопросом) заставил меня подумать, что это может быть фундаментальная проблема с тем, как Matlab реализует объекты, но я все еще не уверен.