ガベージコレクション必須?


単純に

Maxscriptとpythonって
もちろんpythonの方が早いよね?

って事で超簡単なテストをやってみた。

 

まずはMaxscript。

getLocalTime();

for i = 1 to 1000 do
(
	Box pos:[x, 0, 0];
	x = i * 3;
)

getLocalTime();

 

お次はpython

import MaxPlus
import time

start = time.time()
x = 0

for i in range(1000):
    box = MaxPlus.Factory.CreateGeomObject(MaxPlus.ClassIds.Box)
    b_node = MaxPlus.Factory.CreateNode(box, "MyBox" + str(i))
    x = i * 3
    b_node.Position = MaxPlus.Point3(x, 0, 0)

elapsed_time = time.time() - start
print(elapsed_time)

 

単純にmaxscriptとpython双方で箱を1000個作る実験をしたところ。

結果は

Maxscriptが1.4秒ほど。
pythonが0.5秒ほど。
やはりPythonの方が早かった。

もうちょっと複雑な処理になればpythonの速さが際立つと思う。
単純で簡単にかきたい場合はmaxscriptで書けば効率良いし
より処理を速くしたい場合はpythonにやらせればいい。
この辺りは好みの問題なだぁ。

 

と、この実験を何度か繰り返していたら

何故かMaxがフリーズ。
フリーズしたのはMaxscript側。

こんな単純なコードなのに、なんでフリーズしてん??
なにこれ??

しばらく色々探ってみたものの原因がつかめず。
そこで思い当たったのは・・・
これってもしかして何かゴミ溜まってる?

試しにMaxscriptの処理の最後に gc() を追加してみた。
まさかそんな単純な事なのかな?
最後にgc()を追加した状態で何度かMaxscriptを実行してみた。
するとフリーズすることがなくなった。

って事はやっぱり。ゴミ溜まってった?
確かに箱を1000作って消して、作って消してを繰り返していたら
メモリ不足になるかもだけれど、そんなことでMax止まってほしくないんだけど・・・。

あまり深く探っててもしようがないので、
とりあえず、大量処理をする場合はgc()は必要かも、って事で今日は終わり。

以上今日のメモでした。

Leave a comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください