1

親を使用して多次元配列を子に渡しています。projectPositions という名前の配列の構造は次のとおりです (サンプル データを含む)。

projectPositions[0][0] = 1;
projectPositions[0][1] = 5;
projectPositions[0][2] = '1AD';
projectPositions[0][3] = 'User name';

この継承された配列を取得して arrayCollection に変換し、それを dataProvider として使用できるようにする必要があります。現在、私のinit関数(onCreationCompleteを実行)には、配列のこのタスクを処理するためにこのコードがあります-> arrayCollection:

for (var i:int = 0; i < projectPositions.length; i++)
{
tempObject = new Object;
tempObject.startOffset = projectPositions[i][0];
tempObject.numDays = projectPositions[i][1];
tempObject.role = projectPositions[i][2];
tempObject.student = projectPositions[i][3];
positionsAC.addItemAt(tempObject, positionsAC.length);
}

次に、リピーター中に、positionsAC をデータプロバイダーとして使用し、次の方法でアイテムを参照します。

<mx:Repeater id="indPositions" dataProvider="{positionsAC}" startingIndex="0" count="{projectPositions.length}">
    <components:block id="thisBlock" offSet="{indPositions.currentItem.startOffset}" numDays="{indPositions.currentItem.numDays}" position="{indPositions.currentItem.role}" sName="{indPositions.currentItem.student}" />
</mx:Repeater>

これはすべて正常に機能し、目的の効果を返しますが、このアプリケーションの読み込み時間は約 10 秒です。読み込み時間は、配列 -> arrayCollection for ループが原因であると 99% 確信しています。ページが読み込まれるのをそれほど長く待たずに、目的の効果を達成する簡単な方法はありますか?

4

2 に答える 2

1

アイテムをロードする際の問題は、リストクラスの代わりにリピーターを使用していることが原因である可能性があります。

リピーターを使用すると、メモリ内にブロックが作成され、画面に描画されます。したがって、配列に100個のアイテムがある場合、100個のブロックが作成されます。これにより、初期作成とアプリ全体の両方の速度が低下する可能性があります。

リストベースのクラスは、レンダラーのリサイクルと呼ばれる手法に焦点を当てています。これは、表示された要素のみが画面に作成およびレンダリングされることを意味します。したがって、設定によっては、配列にアイテムがいくつあるかに関係なく、通常、画面に7〜10個の「ブロック」インスタンスが表示されます。

于 2011-05-03T18:26:46.647 に答える
0

変化する

positionsAC.addItemAt(tempObject, positionsAC.length);

positionsAC.addItem(tempObject);

addItemAtにより、コレクションのインデックスが再作成され、コレクションの速度が大幅に低下する可能性があります。

[編集]ループの前後にこのトレースステートメントを配置して、出力を取得し、一方を他方から減算すると、ループが実行されたミリ秒数が表示されます。

var date:Date = new Date( );
trace( date.getTime())
于 2011-05-03T18:02:14.413 に答える