Dictionaryは読み込みに対してはスレッドセーフでしょうか？


c#で最初にDictionaryに要素を追加し、その後複数のスレッドから読み込む処理があります。  
Dictionaryの初期化処理はasp.netのInitPageで行います。

この場合、読み込み処理でマルチスレッドのため、問題になることはありますでしょうか？




`System.Collections.Generic.Dictionary<TKey, TValue>` は  
\- 複数スレッドで読み込みのみが行われる場合は安全  
\- 読み込みと書き込みが同時の時は安全でない  
と記載がありますね  
<https://docs.microsoft.com/ja-
jp/dotnet/api/system.collections.generic.dictionary-2?view=netframework-4.8>

`System.Collections.Concurrent.ConcurrentDictionary<TKey, TValue>`
はスレッドセーフであるとのこと  
<https://docs.microsoft.com/ja-
jp/dotnet/api/system.collections.concurrent.concurrentdictionary-2?view=netframework-4.8>

毎回同期をとっていると遅いので、途中での更新が無いなら前者のほうが速そう。あるいは `ImmutableDictionary` にする手もありそう。




`System.Collections.Generic.Dictionary<TKey, TValue>` は  
\- 複数スレッドで読み込みのみが行われる場合は安全  
\- 読み込みと書き込みが同時の時は安全でない  
と記載がありますね  
<https://docs.microsoft.com/ja-
jp/dotnet/api/system.collections.generic.dictionary-2?view=netframework-4.8>

`System.Collections.Concurrent.ConcurrentDictionary<TKey, TValue>`
はスレッドセーフであるとのこと  
<https://docs.microsoft.com/ja-
jp/dotnet/api/system.collections.concurrent.concurrentdictionary-2?view=netframework-4.8>

毎回同期をとっていると遅いので、途中での更新が無いなら前者のほうが速そう。あるいは `ImmutableDictionary` にする手もありそう。

