2011-07-19 94 views
0

我正在開發一個asp.net應用程序。在我的數據庫中,我有一個「經典」單聲道記錄設置表。 每次我需要一個環境,我這樣寫如何「緩存」asp.net應用程序中的持久設置

if ReturnSetting("my_setting") = value then 
'do something 
else 
'do others 
end if 

一些代碼在「ReturnSetting」我打開一個連接,得到了設定值,並返回。 這是不高效的(開放連接,數據採集等)

我該如何優化?

謝謝

回答

0

我想你可以寫調用在應用啓動事件在Global.asax文件中的函數從數據庫加載一次這些數據,並把結果在應用程序中的對象並更新「ReturnSetting」函數來檢查應用程序對象,這將優化您的代碼,以便數據庫調用完成一次。

N.B.如果這是全局網站設置,則此解決方案將有效工作,但如果它是用戶設置,則必須使用global.asax中的Session Start事件和會話來存儲數據。

+0

是的......你說得對。謝謝 ! – stighy

+0

不客氣! –

1

你可以寫一個變量,並填寫他們只在第一次請求。接下來的請求將返回已經填充的變量。

public static class Settings 
{ 
    internal static Dictionary<string, object> _settingsCache = new Dictionary<string, object>(); 
    internal static Mutex _mutex = new Mutex(); 

    public static object Get(string key) 
    { 
     _mutex.WaitOne(); 
     if (_settingsCache[key] == null) 
     { 
      // add to the cache 
      _settingsCache.Add(key, NEW_DATA) 
     } 
     _mutex.ReleaseMutex(); 
     return _settingsCache[key]; 
    } 
} 
+0

重要說明:必須是一個靜態變量 –

+0

靜態變量?在哪個級別?進入表單? into global.asax?在哪裏? – stighy

+0

我用完整的解決方案編輯了我的答案。 – dknaack

相關問題