私はstatic
メソッドを持っており、同時に多くのスレッドからアクセスされます。スレッドセーフの場合、collection
このメソッドはサイズ変更されません(追加/削除なし)。その項目に注意することはLazy
オブジェクトであり、私は(ないことをMEF
)スレッドセーフなものを使用するLazy
コンストラクタへのアクセスを持っていない:私はアイテムごとに使用してlocks
の配列場合ループ内で項目ごとのロックを使用する
private static readonly object _syncLock = new object();
// Now inside a static method
private static DoSomethingOnItem(string wanted)
{
foreach (var item in items)
{
if (item.Metadata["Name"] = wanted)
{
lock (_syncLock)
item.DoSomething();
}
}
}
それはパフォーマンスを向上していまたは多くのlocks
はパフォーマンスの向上よりも多くの副作用がありますか?
private static object[] _syncLocks;
// Code...
_syncLocks = new object[itemsCount]; // in a thread-safe manner
ループ使用内側各item
特定lock
代わりに 'ReaderWriterLockSlim'を使用してください。ホイールを再構築する必要はありません。 :) http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx – bzlm
[スレッドセーフMEFを使用した遅延インスタンス化](http://stackoverflow.com/questions/4633634)/thread-safe-lazy-instantiating-using-mef) –