8

TObjectList(Delphi 2007)を使用して、大量のデータを格納しています。約30万個以上の要素があると予想されます。ただし、リストが作成されるとき、デフォルトのサイズは4つの要素のみを格納するように設定され、5番目の要素を追加しようとすると8つ、9番目の要素を追加しようとすると16になります。数字がずれているかもしれませんが、動作は正しいと思います。これに伴う問題は、すべての要素をメモリの割り当て解除された部分から、新しい拡張リストが移行される新しいメモリブロックにコピーする必要があることです。特定の初期サイズを設定し、リストが割り当て/予約した未使用のスペースの割り当てを解除します(または、予約と割り当ては同じではないため、メモリの予約を元に戻します)。これはおそらく多くのコードではありませんが、永続的なものがあるはずだと思います。

4

1 に答える 1

12

Capacityを予想される要素の最大数に設定し、リストに入力してCapacityから、実際に使用したものに設定します(オプション)。これにより、すべての割り当て/移動/割り当て/移動が回避されます。

MyList.Capacity := 300000;
// Add 280000 items here

// Optionally, reduce the capacity. It's not important to do so unless
//  you end up with a lot of unused items.
MyList.Capacity := MyList.Count;
于 2012-10-17T12:24:09.403 に答える