exponenta event banner

Разумное создание объектов

Накладные расходы на объект

Графические объекты представляют собой сложные структуры, которые хранят информацию (данные и характеристики объектов), прослушивают определенные события (свойства обратного вызова) и могут вызывать изменения в других объектах, чтобы учесть их существование (обновление пределов осей и так далее). Поэтому создание объекта требует ресурсов.

Когда производительность становится важным фактором, постарайтесь реализовать свои цели таким образом, чтобы потреблять минимальное количество ресурсов.

Часто можно повысить производительность, выполнив следующие рекомендации.

  • Не создавать ненужные объекты

  • Избегайте поиска в иерархии объектов

Не создавать ненужные объекты

Найдите случаи, когда можно создать меньше объектов и достичь тех же результатов. Например, предположим, что нужно вывести на график массив точек 10 на 1000, показывающий только маркеры.

Этот код создает 1000 объектов строки:

x = rand(10,1000);
y = rand(10,1000);
plot(x,y,'LineStyle','none','Marker','.','Color','b');

Преобразуйте данные из 10 на 1000 в 10000 на 1. Этот код создает график, который выглядит так же, но создает только один объект:

plot(x(:),y(:),'LineStyle','none','Marker','.','Color','b')

Использование NaNs для моделирования нескольких строк

Если данные координат содержат NaNs, MATLAB ® не визуализирует эти точки. Можно добавить NaNs к данным вершин для создания сегментов линий, которые выглядят как отдельные линии. Поместите NaNs в одно и то же расположение элементов в каждом векторе данных. Например, этот код создает три отдельные строки:

x = [0:10,NaN,20:30,NaN,40:50];
y = [0:10,NaN,0:10,NaN,0:10];
line(x,y)

Изменение данных вместо создания новых объектов

Для просмотра различных данных о том, что в основном является одним и тем же графом, более эффективным является обновление данных существующих объектов (строк, текста и т.д.), а не воссоздание всего графа.

Например, предположим, что требуется визуализировать влияние на данные различных параметров.

  1. Установите пределы любой оси, которую можно определить заранее, или установите режимы пределов оси в значение manual.

  2. Пересчитайте данные с использованием новых параметров.

  3. Используйте новые данные для обновления свойств данных линий, текста и т. д. объектов, используемых на графике.

  4. Звонить drawnow для обновления фигуры (и всех дочерних объектов на фигуре).

Например, предположим, что требуется обновить график по мере изменения данных:

figure
z = peaks;
h = surf(z);
drawnow 
zlim([min(z(:)), max(z(:))]);
for k = 1:50
   h.ZData = (0.01+sin(2*pi*k/20)*z);
   drawnow
end