应用程序与UIAxes缓慢

223(30天)
以法莲Bryski
以法莲Bryski 2020年8月4日
嗨。我创建的应用程序在应用程序设计师使用组件(如滑动条来控制一个阴谋。当UIAxes策划,有明显的延迟。然而,当应用情节在一个单独的图,没有延迟。有人知道原因,如果有一种阴谋UIAxes没有延误?谢谢。
我将使用一个应用程序建模一个圆柱体删除很多额外的不必要的东西,所以问题的类型是尽可能明确。故事情节包括冲浪、补丁和plot3。对于所有应用程序,目标不是绘图数据说,而是创建形状,通常在3维空间。因此,数据通常是数组类型的双通常都不会得到超过100个元素。
我用MATLAB R2020a。
这是两个方法:
  • 我拖拽一个UIAxes轴上的应用和情节。这大约需要3秒更新每次移动滑块的阴谋。这是一个设置的截图:
  • 我创建一个单独的普通图(不是uifigure)和阴谋。这几乎没有延迟:
这是代码用于创建单独的图,让他们整齐(我不认为这是重要的,但它澄清我所做):
全球斧头%需要,因此它可以通过组件访问回调
分= 2;%的比例由应用程序的屏幕
集(0,“单位”,“像素”)
像素= get (0,“拉”);
app.UIFigure.Position =[0, 0,分*像素(3),(4)像素);
无花果=图;%的新人物
fig.Position =[分*像素(3)0 (1-divide) *(3)像素,像素(4)];
ax =轴(图);%轴将会绘制
下面是我使用的代码(我的代码中使用的原始程序简化)(粘土的代码是基于m·汤普森的圆柱函数,和我一直在版权文本代码):
函数扭转(ax, ax2, M, G, L, r, display_in)
%粘土m·汤普森4-24-91 CBM 8-21-92。
% 1984 - 2002版权MathWorks公司。
班(ax)
%工程方程:
J = 1/4 * r ^ 4;
φ= M * L / G (J *);
%建立缸:
n = 50;
r = [r r]”;
r = r (:);%确定r是一个矢量。
m =长度(r);如果m = = 1, r = (r, r);m = 2;结束
θ= 0:n / n * 2 *π;
sintheta =罪(θ);sintheta (n + 1) = 0;
x = r * cos(θ);
y = r * sintheta;
z = (0: m - 1) / (m - 1) * L *的(n + 1);
(ax,“上”)
%的阴谋缸
冲浪(ax, x, y, z,“EdgeColor”,“没有”,“FaceAlpha”,1)
补丁(ax, x (1:), y (: 1)、z (1:) (。25 0 7])
补丁(ax, x (1:), y (: 1)、z (2:) (。25 0 7])
%绘制螺旋
z_vals = linspace (0, L, n * L /(2 *π* r (1)));
我= 0:n - 1
angle0 =我*(2 *π)/ n;
anglef = angle0 +φ;
theta_part = linspace (angle0 anglef、长度(z_vals));
x_part = (r * 1.01) * cos (theta_part);
y_part = (r * 1.01) * sin (theta_part);
z_vals = linspace (0 L长度(x_part));
plot3 (ax, x_part y_part z_vals,“k”,“线宽”5)
结束
%的阴谋圈
i = z_vals
plot3 (ax, x, y,我*的(n + 1),“k”,“线宽”5)
结束
结束
14日的评论
j·亚历克斯。李
j·亚历克斯。李 2021年3月25日
谢谢 @Adam Danz 我认为我和上面公布每个人弄糊涂了……我分开的方式一劳永逸地创建数据,然后保持删除和创建轴里面,所以情节我只显示反映轴创建时间,从那应该和结论 由uifigure叫“输入法确实是花了”,而是建立在现有uifigure uiaxes和轴都是慢于在现有的普通图创建它们。
和我做第二次测试表明,实际上,策划内可能更快uiaxes比普通轴一旦创建,无论是在uifigure或正则图。但无论哪种方式,策划还更快uiaxes或轴中创建一个普通人物。

登录置评。

接受的答案

克里斯门户
克里斯门户 2020年8月7日
推特)谢谢你@ Danz和@Ephraim Bryski。额外的信息是有用的。我看到同样的uifigure / uiaxes缓慢亚当显示。
以法莲,试着用一个uifigure /轴组合。这显示了类似的性能结果图/轴组合:
  • UIFIGURE / UIAXES:运行时间是1.871439秒。
  • UIFIGURE /轴:运行时间是0.205658秒。
  • 图/轴:运行时间是0.204895秒。
一些笔记:
  • UIAXES轴的重量版本(它实际上是一个轴,一个看不见的UI面板)。这使它慢,尽管缓慢的数量有点奇怪。我将报告开发团队进行调查。
  • 轴你进入应用程序设计师从面板中拖拽时总是UIAXES。为了使用一个轴UIFIGURE,您将需要手动创建和位置作为启动功能的一部分。
  • 最后,这些UIAXES /轴差异将很快成为一个更简单一些,工作的故事。留意MATLAB版本注释!
8的评论
亚当Danz
亚当Danz 2021年9月2日
@Alexander Kramlich 在评论栏,查看数据共享的主要问题。它显示了相当大的和一致的时间差异uifigure / uiaxes vs正则图/轴R2020b和R2021a。
总是在沉没之前测试之类的时间实现的东西可能不会解决这个问题。我上面提到的评论还包含m-files,您可以下载并运行在您的系统上测试时间。
如果你看到在运行时轴和uiaxes之间没有区别,表明你正在观察的瓶颈是由于其他一些无关的代码的一部分轴的一代。我也好奇你如何比较两个版本之间的运行时代码。想必你现在有两个版本的代码,使用轴()或uiaxes()和你可以比较他们的运行时使用tic和toc或通过运行Matlab 配置文件 关于每个人的报告。

登录置评。

更多的答案(2)

Matlab的用户
Matlab的用户 2021年3月21日
编辑:Matlab的用户 2021年3月21日
我只是安装了Matlab R2021a这仍未解决——下巴UIAxis滞后仍然存在。也许这是一个错误叉引导到一个新的东西……
@Chris门户 似乎没有人能复制你的解决方案。你确定你没有简单地时间图/轴两次?你能分享你的代码是否适合你。
我用以下代码(而不是全部):
ax_id = app.UIAxes;
一个= animatedline (ax_id,“MaximumNumPoints”,1000);
i = 1:1:100000
addpoints (x (i), y(我));
如果(快速眼动(我100)= = 0)
如果我> = 1000
xlim (ax_id[我- 1000 + 1]);
其他的
xlim (ax_id,[我]);
结束
drawnowlimitrate
结束
结束
这里有一些时间:
  • 没有策划:60年代
  • 标准图+轴:63年代
  • UIaxes只有:84年代
我希望这将是解决未来——许多许多线程与抱怨,但是什么也没有做。

维罗妮卡人告诉
维罗妮卡人告诉 2022年5月2日
有在Matlab速度提升2021 b吗?如果是这样,我仍然难以找到自己

s manbetx 845


释放

R2020a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!