文档

避免更新静态数据

如果定义图形场景的数据只有一小部分随着屏幕的每次更新而变化,那么您可以通过仅更新变化的数据来提高性能。下面的例子说明了这种技术。

性能较差的代码 性能更好的代码

在这个例子中,一个标记通过在每次循环中创建两个对象来沿着表面移动。

[sx,sy,sz] =峰值(500);Nframes = 490;T = 1:nframes surf(sx,sy,sz,“EdgeColor”“没有”)举行plot3 (sx (t + 10 t), sy (t, t + 10),深圳(t + 10 + 10) + 0.5,“o”“MarkerFaceColor”“红色”“MarkerSize”, 14)drawnow结束

创建曲面,然后更新XDataYData,ZData循环中的记号笔。在每次迭代中,只有标记数据会发生变化。

[sx,sy,sz] =峰值(500);Nframes = 490;冲浪(sx, sy,深圳,“EdgeColor”“没有”)举行H = plot3(sx(1,1),sy(1,1),sz(1,1),“o”“MarkerFaceColor”“红色”“MarkerSize”14);持有T = 1:nframes set(h,“XData”sx (t + 10, t),“YData”sy (t, t + 10),“ZData”深圳(t + 10, t + 10) + 0.5) drawnow结束

分割数据以减少更新时间

考虑这样一种情况,当代码在循环中执行时,对象的数据增长非常大,例如随着时间的推移跟踪信号的行。

每次呼叫drawnow,更新被传递给渲染器。数据数组越大,性能越差。如果您正在使用这种模式,请采用右边示例中描述的分割方法。

性能较差的代码 性能更好的代码
%增长数据图(“位置”,[10,10,1500,400]) n = 5000;H =楼梯(1,1);Ax = gca;斧子。XLim = [1,n];斧子。YLim = [0,1];斧子。ZLim = [0,1];斧子。NextPlot =“添加”;Xd = 1:n;Yd = rand(1,n);抽搐Ix = 1:n set(h,“XData”xd(1:第九)“YData”码(1:第九));drawnow;结束toc
分段数据图(“位置”,[10,10,1500,400]) n = 5000;Seg_size = 500;Xd = 1:n;Yd = rand(1,n);H =楼梯(1,1);Ax = gca;斧子。XLim = [1,n];斧子。YLim = [0,1]; ax.ZLim = [0,1]; ax.NextPlot =“添加”;Tic start = 1;第九= 1:n限制对象大小如果(ix-start > seg_size) start = ix-1;H =楼梯(1,1);结束集(h,“XData”第九,xd(开始:),“YData”码(开始:第九));%更新显示在50个点块如果Mod (ix,50) == 0 drawnow;结束结束toc

这段代码的性能更好,因为限制因素是更新期间发送的数据量。

这个话题有用吗?