2011-04-05 87 views
3

我需要在當前正在處理的項目中實現多個應用程序級別的行爲。 有幾件事情需要我的頭腦: 1.我在哪裏以及如何定義應用程序級變量? 2.這些變量的壽命是多少?或更準確地說,他們在什麼情況下被丟棄? (應用程序池回收?應用程序二進制文件從內存中刪除並在下一個請求中重新編譯?等等) 3. global.asax文件是放置會話計數器還是將值存儲到DB /文件的好地方更好的方式來堅持這種數據?global.asax範圍和生命週期澄清

歡迎任何意見或想法。 謝謝! -Elad

回答

3

應用程序級變量具有應用程序的生命週期。這意味着應用程序池被回收,它們被丟棄。
應用程序池可以由於不同的原因而被回收。可以對IIS 6/7進行配置,以便應用程序池在一定時間後,在一定數量的請求之後或以指定的時間間隔進行回收。 您可以設置應用程序變量是這樣的:

Application["DbConfig"] = "my value"; 

,但你必須要知道的,如果你嘗試設置在不同的地方/訪問時可能會遇到的問題。您必須採用一種方法來鎖定更新時的變量。

我我們web.config所有配置參數,然後,我創建了自己的類,我用它來存儲應用領域:

namespace Web.My 
{ 
    public class Application 
    { 
     public static string ApplicationStorageFolder 
     { 
      get 
      { 
       return (System.IO.Path.Combine(HttpContext.Current.Server.MapPath("~"), "_AppStorage")); 
      } 
     } 
    } 
} 

如果我需要在應用程序啓動時設置某些字段我這樣做Application_Start 如果您需要堅持信息,您可以創建自己的配置文件(xml或簡單文本)來存儲和讀取應用程序啓動和關閉時的值。您可以將您的課程序列化爲XML文件,以便您做好準備,輕鬆地重新填充您的屬性。 一個數據庫也可以。 我會對會話計數器做同樣的事情。

+0

謝謝你的詳細回覆!所以你說你不會使用應用程序級變量來存儲會話計數器? – 2011-04-05 08:30:15

+1

不,我不會將它用於應用程序計數器,因爲它可能會被回收,因此您無法依賴它。對於一個會議應該沒問題。 – LeftyX 2011-04-05 09:27:51

+0

非常感謝。那只是我正在尋找的信息。 – 2011-04-05 09:34:23