我想提高应用程序设计器中GUI的效率,即使它涉及一次预先加载图形生成以节省后续视图/更新中的时间。
我正在尝试更新一个UIAxes,其中包括4个patch()句柄,以及大约10个plot3()句柄,它们引用了大约30行。目标是生成图形,然后能够在120个不同的时间点上更新所有数据的位置。 (通过结果“播放”)
问题在于,一次更新图形大约需要1.5秒。与patch3()句柄相比,更新patch()句柄的速度大约快一个数量级。尽管我的代码不需要立即运行,但我希望它的更新速度更快(每个时间点<0.5秒)。
我正在使用以下语法来更新(作为示例)我的plot3句柄之一,该句柄包含3个不同的线对象(因此,对{'XData'}的单元格引用):
set(p1.foo1,{'XData'},num2cell([foo1.fem.nds(:,1,1) foo1.tib.nds(:,1,1)],2));
set(p1.foo1,{'YData'},num2cell([foo1.fem.nds(:,2,1) foo1.tib.nds(:,2,1)],2));
set(p1.foo1,{'ZData'},num2cell([foo1.fem.nds(:,3,1) foo1.tib.nds(:,3,1)],2));
这大约需要0.3秒才能运行,并且只有5个plot3手柄中的1个。我还尝试在循环内运行set()命令,以避免num2cell调用,因为我认为它比较慢。不幸的是,这进一步放慢了速度。
所以我想知道是否有人熟悉以下任一解决方案: 1)以比我在此描述的更快,更有效的方式更新绘图数据。 2)将所有这些图形集(120个时间点,120个图形)预先加载,并可能在我浏览时间序列时一次将它们放置到我的GUI中,方法是在循环浏览时从UIAx中添加和删除每个单独的图形120分。我意识到这会占用更多的内存,但是我宁愿拥有更多的内存,而不是更多的时间。
我希望这很清楚,任何建议都会受到赞赏。
答案 0 :(得分:1)
似乎您正在寻求一般建议。如果您需要更具体的答案,请尝试创建minimum reproducible example.
否则,一些一般性提示:
set()
对象的line
方法可以与标准数值数组一起使用:primative line documentation Struct
具有一些相关的开销。看起来您有多个嵌套结构包含数字数组。从该结构检索此数据可能很慢。您始终可以使用tic / toc来查看速度。但通常,请尽可能避免使用结构,并将数字数据存储为自己的变量。有关更多信息,请参见arrays of structs vs. structs of arrays上的一些建议。