2015-12-17 71 views
2

我维护一个软件包,可以自动摄取数据。导入原始数据时,将绘制原始数据并将一些数据图形保存到磁盘。不幸的是,print函数大大降低了我的性能。在Matlab中优化打印功能

下面是代码性能的击穿

我的执行时间
Script  Time 
myscript  9.091s 
uichoosefile 3.567s 
print  4.178s 
legend  0.751s 

只有大约3/4S是真正的处理时间和print是最大的timesink这里。

print两条线占用的时间

Line Code        Time 
212 pj = pj = alternatePrintPath(pj); 3.173s 
148 drawnow;       0.751s 

如何创建的print的优化版,不被这两条线的瓶颈几乎是100%?诸如降低图形分辨率的简单优化例程是不可取的。

+0

'print'是一个很大的功能,可以做很多事情。你打电话过得怎么样?请提供示例代码来演示您正在尝试执行的操作。 – horchler

+0

此时你是否需要将图形保存为光栅格式(PNG,JPG或者是否导出它们),或者您可以将.fig文件保存为hgsave并将其推迟到后期阶段? – txpaulm

+0

@txpaulm不幸的是我没有限制矢量或光栅格式的豪华。当数据被摄入时,客户的配置文件也被取消,其中指定了其数据,PNG,PDF,SVG,EPS等的交付格式。PDF + PNG是最典型的情况。打印在执行过程中发出命令时很麻烦,所以我不相信推迟保存是非常可行的;它可能会中断,例如,操作员在保存程序中点击。 –

回答

1

Matlab实际上比较特殊,因为它很容易优化其内部功能。 I did thisode15s在我编写的systems biology modelling工具箱中。

这是你怎么做你自己:

  1. 创建一个新的文件夹。我会叫它image_print
  2. 该文件夹添加到Matlab的路径,你可以用它随时随地addpath('image_print')
  3. 复制要优化到新文件夹image_print,并给该文件一个新名称的功能。我会称之为printimage.m
  4. 在原始函数所在的文件夹中,将会有一个名为private的文件夹。将该文件夹复制到您的新文件夹image_print。保留名称为private

现在,您可以使用printimage并优化它,而无需搞乱Matlab的其余部分。实际上有什么帮助将完全取决于您的实际工作流程,并且需要相当的巧妙。你使用profiler从正确的位置开始。基本上,你必须通过反复试验找出缓慢的步骤,然后看看是否有更快的方法来专门为你的工作做。原始功能非常一般,因此您可以将整个部分剪掉。不要忘记,您也可以修改private中的功能。

奖励建议:因为您只想将数字保存到磁盘,您可能需要关注如何防止它们浪费实际绘制到屏幕上的时间。您可以完全评论drawnow行,但请回报实际发生的情况。

+0

,你称这很容易? .... *重复,直到所有缺少的功能* ...我认为你的意思是所有这些都是作为一个讽刺的评论,我希望 – percusse

+0

@percusse命名另一种语言,可以在10分钟内修改'print'。 – drhagen

+0

Python,Javascript,R如果你在matlab中用10分钟完成它,我会再次开始使用它 – percusse