System.Classes.TList.Capacity
Delphi
property Capacity: Integer read FCapacity write SetCapacity;
C++
__property int Capacity = {read=FCapacity, write=SetCapacity, nodefault};
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
property | public | System.Classes.pas System.Classes.hpp |
System.Classes | TList |
説明
TList オブジェクトがポインタの配列を保持する割り当てサイズを指定します。
Capacity には,リストに保持するポインタの数を設定します。Capacity を設定して,指定されたサイズにリストを拡張するために必要なメモリがない場合には EOutOfMemory 例外が発生します。
Capacity は,メモリを割り当て直さなくても,リストが保持できるオブジェクト数を取得できます。Capacity と Count を混同しないでください。Count は使用されているリスト内のエントリ数です。Capacity の値は必ず Count の値と等しいかまたはそれ以上になります。Capacity が Count より大きい場合,Capacity を Count と同じ値に設定するとメモリの無駄を防げます。
すでに容量がいっぱいのリストにオブジェクトを追加すると,Capacity プロパティの値は自動的に増えます。オブジェクトを追加する前に Capacity を設定しておくと,メモリ再割り当ての回数が減り,結果として性能が向上します。次に例を示します。
メモ: Delphi の例:
List.Clear; List.Capacity := Count; for I := 1 to Count do List.Add(...);
メモ: C++ の例:
List->Clear(); List->Capacity = Count; for (int I = 0; I < Count; I++) List->Add(...);
for ループの前に Capacity への代入を行うことによって,以降の Add 演算のたびにリストの再割り当てをしないで済みます。Add の呼び出しによる再割り当てを回避すると,性能が向上し,また Add 演算が例外を生成することもなくなります。