2012-04-05 5 views
5

大きな一連の図を.pngファイルとして印刷しています。各図はデータ行列の列のプロットで、.pngファイルを取り込んでそれらを一緒にアニメーションにします。多くの(.png)フィギュアを印刷すると、MATLABが遅くなるのはなぜですか?

私の問題は、最初の数百枚の画像がすばやく印刷されますが、新しい図形を作成する時間は、最初の数百の.pngファイルの場合は約0.2秒から800秒のときには2秒以上数字。

スクリプトの実行中にメモリ使用量が増加しますが、数秒ごとに1MBだけ増加します。これはR2009b 64ビットを実行しているWindows上にあります。

私のコードは次のようになります。

n = 1000; 
matrix = rand(n); 

f = figure('Visible','off'); % create the figure 

for i_ =1:n 
    plot(1:n,matrix(:,i_)); 
    ylim([0 1]); 
    set(f,'PaperUnits','inches','PaperPosition',[0 0 6 4]); 
    png_name = [ 'img/timestep_' sprintf('%05d',i_) ]; 
    print('-dpng', png_name); 
end 
+0

一度に500件しかできませんか?あなたのアプリを再起動するサービスがありますか? –

+3

私はこれを十分に強調することはできません... MATLABには素晴らしいプロファイラが組み込まれており、定期的に使用する必要があります。プロファイリングはこの問題の多くを特定するのに役立ちます。 – linuxuser27

答えて

4

プロットを再生成しないようにしてください、だけ各反復でXDataYDataプロパティを変更:

set(f,'PaperUnits','inches','PaperPosition',[0 0 6 4]); 
h = plot(1, matrix(:,1)); 
ylim([0 1]); 

for i_ = 1:n 
    set(h, 'XData', 1:n, 'YData', matrix(:,i_)) 
    png_name = sprintf('img/timestep_%05d',i_); 
    print('-dpng', png_name); 
end 

別の提案を。アニメーションを作成したいのであれば、なぜpngファイルを生成していますか? GETFRAMEを使用し、MOVIEをMATLABで直接作成してください。

2

これはメモリリークのようです。ループ内の各数字をclosingと作成することで、漏れたメモリを解放することができます。

for i = 1:n 
    f = figure; 
    % plot 
    % print 
    close(f) 
end 

更新:Here's a question and answerこの手法が機能することを言って。

+0

試してみませんでしたが、イメージを閉じて新しいイメージを作成するのに時間がかかる場合は、100イメージごとに行うようにしてください。 –

関連する問題