Кеш кажется очень медленным - PullRequest
0 голосов
/ 12 марта 2012

У меня есть этот фрагмент кода кэширования

public static ICollection<Messages> GetMessages()
{
    if (System.Web.HttpContext.Current.Cache["GetMessages_" + user_id] == null)
    {
        using (DataContext db = new DataContext())
        {
            var msgs = (from m in db.Messages 
                        where m.user_id == user_id 
                        && m.date_deleted == null                
                        select m).ToList();

            System.Web.HttpContext.Current.Cache.Insert(
                "GetMessages_" + user_id, msgs, null, 
                 DateTime.Now.AddMinutes(5), TimeSpan.Zero);
        }
    }
    return System.Web.HttpContext.Current.Cache["GetMessages_" + user_id] 
               as ICollection<Messages>;
}

При первом запуске он извлекает данные из таблицы SQL и занимает около 1500 мс.Каждый последующий звонок занимает около 600 мс.Коллекция, в которой я сейчас тестирую, содержит всего 3 объекта, каждый с минимальным количеством данных (строка, 3 поля даты и времени, 3 bools и 5 int)

Это нормально?загрузка страницы с таким небольшим количеством данных занимает почти 2 секунды, каждый раз.

[К вашему сведению, он работает только на компьютере разработчика, а не на полноценном веб-сервере.данные извлекаются с удаленного сервера, но это должно влиять только на начальную загрузку страницы]

Ответы [ 2 ]

0 голосов
/ 08 июня 2012

Как отметил HackedByChinese, это работало на веб-сервере разработки VS, что, конечно, замедляло работу.Тем не менее, я обнаружил, что мой стиль программирования предусматривает очень медленное время загрузки.

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

На странице настроек я буду вызывать функцию каждый раз, когда хочу вернуть свойство.Например, Cache.GetSettings().username, затем Cache.GetSettings().useremail и т. Д. Я предполагал, что это заставит приложение работать немного быстрее, поскольку оно каждый раз извлекает объект из кэша без необходимости доступа к базе данных.Но очевидно, что кэш не так быстр, как память.Каждый вызов занимал около полсекунды (на локальном сервере) и, возможно, 0,1 с или 2 с на удаленном сервере.Я понял, что если установить это значение в переменную ...

var settings = Cache.GetSettings();

, то обратил внимание, что вместо этого время загрузки значительно сократилось.В этой строке была одиночная нагрузка 0,5 с, а затем каждое последующее обращение к настройкам занимало совсем немного времени.

Итак, подведем итог: кеш может быть медленным, но только если вы используете его глупо, как я!

0 голосов
/ 17 марта 2012

Пожалуйста, помните, что когда вы создаете первый контекст в коде EF, первый подход - EF должен перестроить модель из метаданных, что замедляет первый вызов.

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