Как избежать использования 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 реализует объекты, но я все еще не уверен.

Ответы на вопрос(3)

Ваш ответ на вопрос