如何在asp.net中缓存我的静态变量

时间:2011-07-01 23:14:21

标签: asp.net class caching

我的常规程序基本上是从main()开始的,第一个语句总是:

Main()
{
    AppSettings.Initialize();

    //etc.
}

在asp.net程序中,我想使用相同的类但没有main()所以我使用Global.asax

Application_BeginRequest() 
{
    AppSettings.Initialize();

    //etc.
}

Application_Start() 
{
    AppSettings.Initialize();

    //etc.
}

这样我就可以继续使用全局静态变量,比如AppGlobal.ID等。我在WP7中使用相同的类和辅助类,它们都运行正常,我不关心初始启动     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...
}

1 个答案:

答案 0 :(得分:0)

最好通过会话变量来创建变量的属性并设置和获取,尽管可以通过使其序列化来缓存类

试试这个:

 MyClass obj_cl = new MyClass();

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

        //on retreival

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