[AS3] Vectorインスタンスには長さを定めた方がよい [Edit]

Adobeのドキュメント「VectorクラスとArrayクラス」は、Vectorインスタンスには予め長さ(Vector.lengthプロパティ)を定めた方がパフォーマンスはよいと説明します。ただ、日本語の意味がわかりにくいように思われます。

Vectorのサイズが時間よりも先に指定されない場合、Vectorの容量が不足すると、サイズが増えます。Vectorのサイズが増えるたびに、メモリの新しいブロックが割り当てられます。Vectorの最新の内容がメモリの新しいブロックにコピーされます。データを余分に割り当てて複製することにより、パフォーマンスに影響があります。

英語の原文はつぎのとおりです。Vector(インスタンス)の"size"というのは、コンストラクタメソッドの第1引数もしくはVector.lengthプロパティで定まる整数値を指しますので、「長さ」と訳すのが文脈に即します。また、"ahead of time"は、「前もって」とか「予め」という意味でしょう。

If the size of the vector is not specified ahead of time, the size increases when the vector runs out of space. Each time the size of the vector increases, a new block of memory is allocated. The current content of the vector is copied into the new block of memory. This extra allocation and copying of data hurts performance.

筆者は以下のように邦訳しました。比べてみると、日本語ドキュメントも必ずしも間違った訳し方をしている訳ではありません。しかし、訳者が説明の中身をおそらく十分に理解してはいないのではないかと感じられます。

Vectorの長さが前もって定められていないと、長さが足りなくなったときに増やされます。Vectorの長さが増えるたびに、新たなメモリ領域が割当てられます。そのときのVectorの中身は、その新たなメモリ領域にコピーされます。追加の割当てとデータのコピーは、パフォーマンスを損なうことになります。

ドキュメントの日本語訳だけではつまりません。実際に、Vectorインスタンスの長さを定めた場合と定めない場合で、速さを比べてみます。

Comparing speed of Vector with/out parameters - wonderfl build flash online

コンストラクタの第2引数またはVector.fixedプロパティで指定する長さの固定については、明らかな速さの違いが認められないようです。しかし、データに強い制限が加わるほど、一般的には内部的な最適化の余地は増えます。将来の改善を期待したいところです。なお、「Vectorクラス対Arrayクラスの処理速度比較」を併せてご参照ください。

コメント

この記事にコメントを書く

記事に対するテクニカルな質問はご遠慮ください(利用規約)。

その他の記事