2017-07-19 69 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

這個文件的第一行規定:

表示可以由多個線程同時訪問鍵/值對的線程安全集合。