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

如何在asp.net中缓存静态变量,asp.net,class,caching,Asp.net,Class,Caching,我的常规程序基本上是从main()开始的,第一条语句始终是: Main() { AppSettings.Initialize(); //etc. } 在asp.net程序中,我希望使用相同的类,但没有main(),因此我使用Global.asax Application_BeginRequest() { AppSettings.Initialize(); //etc. } Application_Start() { AppSettings.In

我的常规程序基本上是从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变量,所以我还将它添加到了应用程序_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...
}

最好是生成变量的属性,并通过会话变量进行设置和获取,尽管可以通过序列化来缓存类

试试这个:

 MyClass obj_cl = new MyClass();

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

        //on retreival

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

应用程序启动应该发生一次(在应用程序重新启动后),而不是每次页面请求。我会检查以确保您的应用程序没有在每次请求后超时/重置。
应用程序启动
应该可以工作。应用程序启动事件仅在应用程序第一次启动时触发,而不是针对每个会话启动,甚至更少针对每个请求。编辑:凯尔更快;)但是类如何缓存自身呢?用“缓存这个”?你能举个例子吗?