Line 129 in saveas function is slow!

조회 수: 9 (최근 30일)
Justin
Justin 2011년 8월 4일
I'm plotting some figures in a script where I create a single figure and then clear the figure and replot to the current axes. I save the figures using saveas after each figure is plotted. Saveas is called 16 times (8 times it saves as a .fig and 8 it saves as a .ai). My function is taking nearly 5 minutes to run with 98.9% of that being saveas line 129 which is this:
if ~isempty(format) && any( exist( ['saveas' format]) == [2 3 5 6] ) %#ok
It doesn't make sense to me that this line should take so long. I'm using Matlab 2007b. Here is the profiler output.
Lines where the most time was spent Line NumberCodeCallsTotal Time% TimeTime Plot 129if ~isempty(format) &&...16 280.099 s98.9% 130feval( ['saveas' format], h, n...81.907 s 0.7% 159print( h, name, ['-d' dev{i}] ...81.121 s 0.4% 136[ops,dev,ext] = printtables; %...80.017 s0.0% 160return80 s0%All other lines 0 s0% Totals 283.145 s100%
Thanks in advance.
Justin

답변 (2개)

Oliver Woodford
Oliver Woodford 2011년 8월 5일
If the question were instead "How can I make saveas faster?", I'd say -
Change line 129 to:
if ~isempty(format) && ~isempty(strmatch(format, char('fig', 'm', 'mfig', 'mmat'), 'exact'))
  댓글 수: 1
Fangjun Jiang
Fangjun Jiang 2011년 8월 5일
Yes, good idea! The rest of saveas.m did use strmatch( , ,'exact') to compare other format such as .bmp or .eps. This could be a nice enhancement of the saveas() function.

댓글을 달려면 로그인하십시오.


Fangjun Jiang
Fangjun Jiang 2011년 8월 4일
It is true for me too. That line consumes more than half of the time if I save the plot to a .fig file and repeat it a dozen times.
You could put it in a good way that the other part of the code is fast.
To understand it further, the time consuming part is the exist() function, it tries to see if a file named 'saveasfig' exists in the MATLAB path. It does and it's a private function. It could also search for saveasfig.mex, saveasfig.p. That is what [2 3 5 6] for.
It sounds unreasonable that it spent 280 seconds on that line of code, unless your computer is really old and slow. I suggest you check your MATLAB path and remove unnecessary folders in it. Run rehash might also help.
>> which saveasfig -all
.\MATLAB\R2007b\toolbox\matlab\general\private\saveasfig.m % Private to general
  댓글 수: 1
Justin
Justin 2011년 8월 4일
My computer isn't old, it's practically new. It's a 64 bit machine running 32 bit Matlab with Windows 7.
I'll try rehash. It could also be that I have a lot of folders in my MATLAB path. I'll also try limiting those. Thanks!

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Printing and Saving에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by