Как кэшировать мои статические переменные в asp.net - PullRequest
0 голосов
/ 02 июля 2011

Мои обычные программы в основном запускаются из 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 голосов
/ 02 июля 2011

Лучше создать свойства переменной, а также задать и получить переменные сеанса, хотя вы можете кэшировать класс, сделав его сериализованным

попробуйте это:

 MyClass obj_cl = new MyClass();

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

        //on retreival

        MyClass tempobj = (MyClass)Session["obj_cl"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...