あなたはこれらの機能にアクセスする頻度を考慮する必要があると言えば、そうです。 count
に常時アクセスしている場合は、必要以上に遅くなるためオンデマンドではありません。他の機能にさらにアクセスする場合は、毎回count
を再計算することも無駄になります。
真ん中には、フラグがfalseに設定されている場合にcount
をオンデマンドで計算してから、フラグをtrueに設定するものがあります。 add
、remove
などを呼び出すと、フラグはfalseに設定されます。
このような何か:あなたが行にcount
複数回アクセスした場合、これは本当に唯一の間でなど、add
、remove
にアクセスせずに利益をもたらすであろう、そしてそれはadd
にアクセスする
Class CachedCount
int count = 0;
boolean count_is_valid = false;
int getCount()
if count_is_valid
return count;
else
count = calculate_count();
count_is_valid = true;
return count;
void Add(item)
count_is_valid = false;
...
...
注意、remove
などは、count
へのコールでインターリーブされません。要求がインターリーブされている場合、この利点は失われます。最大の利点は、add, count, add, count, remove, count, remove, count, add, count
ではなくadd, add, add, remove, remove, add, count, count, count, count, count, count
のようなシーケンスから得られます。
ありがとうございました。あなたの中盤に小さな例を挙げてください。 –
私よりも速く:) –
そこには擬似コードがあります。私はそれをC#に変換する練習として残します。それ以外に何か、 – Welbog