Как поместить элемент управления ASP.NET в кеш? - PullRequest
0 голосов
/ 05 октября 2011

У меня есть сайт SharePoint2010, для которого я создал элемент управления ASP.NET. Содержимое меню ASP.NET изначально пустое, и в Page_Load я загружаю его содержимое из стандартных файлов HTML на сервере:

           protected void Page_Init(object sender, EventArgs e)
        {
            string MenuPath = (string)ConfigurationSettings.AppSettings["RootMenuPath"].ToString();

            Menu1.Items[0].ChildItems[0].Text = File.ReadAllText(MenuPath + "\\About.htm");
//etc...
}

Я заметил, что это ужасный способ делать вещи. Он попадает на диск каждый раз, когда пользователь загружает страницу.

Как я могу:

a) Кэшировать код и пункт меню asp.net, чтобы он оставался в памяти?

б) Использовать другой метод, чтобы убедиться, что он не загружен с диска?

Спасибо

Ответы [ 3 ]

1 голос
/ 05 октября 2011

Вы можете обернуть загрузку данных в свойство и использовать там как минимум страничный кеш:

 readonly object cacheLock = new object();
string AboutHTM
{
    get
    {
        if (Cache.Get("page.about") == null)
            lock (cacheLock)
            {
                if (Cache.Get("page.about") == null)
                    Cache.Insert(File.ReadAllText(MenuPath + "\\About.htm"));
            }
        return Cache["page.about"].ToString();
    }
}
0 голосов
/ 05 октября 2011

Если возможно, я бы сохранял данные меню в файле XML и кэшировал файл XML.

XmlDocument xDoc = new XmlDocument();

if (Cache.Get("MenuData") == null)
{
    xDoc.Load(Server.MapPath("/MenuData.xml"));
    Cache.Insert("SiteNav", xDoc, new CacheDependency(Server.MapPath("/MenuData.xml")));
}
else
{
    xDoc = (XmlDocument)HttpContext.Current.Cache.Get("MenuData");
}
0 голосов
/ 05 октября 2011

Вы действительно могли бы использовать кэш или некоторую переменную, которая инициализируется только один раз в Application_Start и используется повторно позже, но я боюсь, что вы делаете некоторую преждевременную оптимизацию здесь. Вы, вероятно, не должны делать это, если не определили, что это является узким местом для производительности вашего приложения. Чтение файлов с диска - это быстрая операция, особенно если они маленькие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...