2017-07-19 13 views
-1

静的な辞書を含むASP.NET MVCアプリケーションで作業しています。これは、Dictionaryクラスがスレッドセーフではないため、同時のWeb要求によってアクセスされたときに問題を引き起こす可能性があるため問題になります。ASPでスレッドセーフな静的辞書を作成するMVC

public class DataDictionary 
{ 
    private object Lock = new object(); 
    private int NextId = 0; 
    private Dictionary<int, Data> DataLog = new Dictionary<int, Data> {}; 

    public int Add(Data data) 
    { 
     lock (Lock) 
     { 
      var id = NextId++; 
      DataLog.Add(id, data); 
      return id; 
     } 
    } 

    public Data GetData (int id) 
    { 
     lock (Lock) 
     { 
      return DataLog[id]; 
     } 
    } 

    public void Remove(int id) 
    { 
     lock (Lock) 
     { 
      DataLog.Remove(id); 
     } 
    } 
} 

このようにすると、同時に実行されるWeb要求によって辞書に安全にアクセスできますか?そうでない場合は、同様の動作を安全に行うために何ができますか?

+1

あなたのAppPoolがリサイクルするときはどうなりますか?または、スケールアウトする必要があるとき? '静的'は常にラメ・コス・アウトです。 –

+2

ConcurrentDictionaryはどうですか?そこには、[ここ](https://msdn.microsoft.com/en-us/library/dd287191(v = vs.110).aspx)のドキュメントがあります。ドキュメントの最初の行は、複数のスレッドが同時にアクセスできる、キーと値のペアのスレッドセーフなコレクションを表します。 –

+0

@HenkHoltermanスケーラビリティに関係なく、アプリケーションは内部でのみ使用され、 10人。それが変更された場合、私はこのアプリが長く死んでしまうことを保証することができます。 – Conduit

答えて

0

ConcurrentDictionaryについては、ドキュメントはhereです。

本書状態の最初のライン:

は、同時に複数のスレッドによってアクセスされることができるキー/値ペアのスレッドセーフなコレクションを表します。

関連する問題