それを覚えておいてください。これは複数回呼び出されますが、完全な作業は 1 回だけ行います。
private List<string> _states; //if GetStateList() doesn't depend on object
//state, then this can be static.
public List GetStateList()
{
if(_states == null)
{
List lstState=new List();
lstState.add("State1");
lstState.add("State2");
lstState.add("State3");
_states = lstState;
}
return _states;
}
スレッド化の問題に応じて、次のいずれかを実行できます。
- 全体をロックします。保証された単一の実行。
- への割り当てをロックし
_states
ます。初期段階で不要な作業が発生する場合がありますが、すべての呼び出し元が同じオブジェクトを受け取ります。
- 初期の呼び出し元が互いに上書きできるようにします。
最後の呼び出しが最も無駄に見えるかもしれませんが、長い目で見れば最良の呼び出しになる可能性があります。最初の期間の後、異なる呼び出しが不必要に相互に上書きされる可能性があるため、その時点からより単純で高速になります。実際には、どれだけの作業が行われるか、および_states
割り当てられる前に同時に呼び出される可能性がある頻度に依存します。