2011-07-01 29 views
0

我的正常程序basicly從main()和第一個語句開始總是:如何緩存我的靜態變量在asp.net

Main() 
{ 
    AppSettings.Initialize(); 

    //etc. 
} 

在asp.net程序,我想使用同一類,但沒有一個main(),所以我用在Global.asax

Application_BeginRequest() 
{ 
    AppSettings.Initialize(); 

    //etc. 
} 

Application_Start() 
{ 
    AppSettings.Initialize(); 

    //etc. 
} 

這樣我可以繼續使用像AppGlobal.ID全局靜態變量,等我用相同的類和助手班WP7,這一切都工作正常,我不關心的 APPLICAT的初始啓動AppGlobal中的離子變量,AppSettings需要大約2秒鐘的時間進行設置。

在asp.net,因爲初始化/設置重複與每一個頁面請求不以這種方式工作。我想緩存 的AppGlobal類和AppSettings的類,但怎麼樣?

這個話題的額外的編輯更好地說明這個問題

因爲只有第一頁,我可以在頁面中使用的代碼AppGlobal.Name變量,我說這也是對的Application_BeginRequest。

public class AppSettings 
{ 
    // 

    public static void Initialize() 
    { 
    } 

    static AppSettings() 
    { 
     AppGlobal.DeveloperMode = Convert.ToBoolean(AppConfigValue("DeveloperMode,False")); 
     AppGlobal.DebugLevel = Convert.ToInt32(AppConfigValue("DebugLevel,1")); 

     AppGlobal.FilesFolder = AppConfigValue("FilesFolder,Files"); 
     AppGlobal.LogFilesFolder = AppConfigValue("LogFilesFolder,LogFiles"); 
     AppGlobal.CompanyName = AppConfigValue("CompanyName"); 
     AppGlobal.OwnerName = AppConfigValue("OwnerName"); 
     AppGlobal.ApplicationID = ""; 
     AppGlobal.Initialize(); 
    } 
} 

public class AppGlobal 
{ 
    public static bool DeveloperMode; 
    public static int DebugLevel = 0; 
    public static string ApplicationName = ""; 
    private static bool _initialized; 

    public static void Initialize() 
    { 
    } 

    AppGlobal() 
    { 
     //Initialize application (check license, setup folder names, get settings) 

     //This takes a few seconds to create 
    } 

} 

public class Log 
{ 
    public static string FileName; 
    public static int DebugLevel = 0; 
    public static bool Initialized = false; 

    static Log() 
    { 
     FileName = AppGlobal.ApplicationName; 
    } 

    //etc... 
} 
+0

的Application_Start應出現一次(應用程序重新啓動後),而不是每個頁面請求。我會檢查以確保您的應用程序在每次請求後都不會超時/重置。 –

+0

'Application_Start'應該可以工作。 Application_Start事件僅在應用程序啓動時第一次觸發,而不是每個Session_Start,並且對於每個請求都更少。編輯:凱爾也較快;) –

回答

0

這是更好地把這些變量的性質和設置,並通過會話變量得到,雖然你可以通過它系列化

試試這個緩存類:

MyClass obj_cl = new MyClass(); 

     //Do your Work 
     Session["obj_cl"] = obj_cl; 

     //on retreival 

     MyClass tempobj = (MyClass)Session["obj_cl"]; 
+0

但是,如何才能類緩存本身?與「緩存這個」? – user324365

+0

指類實例 – SMK

+0

你能提供一個例子嗎? – user324365