リスト コレクションがあり、それをマルチ スレッド アプリで反復処理したいと考えています。変更される可能性があり、foreachを実行するときに「コレクションが変更されました」という例外が発生したくないため、反復するたびに保護する必要があります。
これを行う正しい方法は何ですか?
アクセスまたはループするたびにロックを使用します。私はデッドロックがかなり怖いです。たぶん、私はロックを使用することに偏執的であり、そうすべきではありません。デッドロックを回避するためにこのルートを使用する場合、何を知る必要がありますか? ロックはかなり効率的ですか?
foreach を実行するたびに List<>.ToArray() を使用して配列にコピーします。これはパフォーマンスに影響を与えますが、簡単に実行できます。コピーする時間だけでなく、メモリのスラッシングも心配です。ただ過剰に思えます。ToArray を使用するのはスレッド セーフですか?
foreach を使用せず、代わりに for ループを使用してください。リストが縮小されていないことを確認するために、これを行うたびに長さチェックを行う必要はありませんか? それは迷惑そうです。