Telerik OpenAccess против SubSonic в простом тесте скорости (не «что лучше»)
-
28-10-2019 - |
Вопрос
Я использую SubSonic 2 около 5 лет, и мне он очень понравился. Однако в течение последних шести месяцев я раздумывал над идеей перейти либо на SubSonic 3, либо на аналогичный инструмент ORM. Поскольку моя компания использует множество инструментов Telerik, я решил попробовать OpenAccess. После настройки я решил, что попробую выполнить чрезвычайно простую задачу - загрузить RadGrid с информацией из нашей таблицы Users (~ 30 записей).
Итак, в событии Grid OnNeedDataSource у меня есть следующее:
родовое словоПосле создания и запуска страницы он возвращает, что потребовалось 1607 мс. Однако после обновления страницы возвращается значение 0 секунд. (Почему?)
Затем я ввел код SubSonic:
родовое словоЯ запускаю код впервые, и он говорит, что это заняло 171 мс. После обновления страницы он сообщает, что потребовалось 60–70 мсек.
Итак, у меня вопрос: Почему OA загружается значительно дольше при первом посещении, но при каждом обновлении страницы загружается ноль секунд? В то время как SubSonic значительно быстрее при первом посещении, но занимает ~ 65 мс на каждое обновление страницы?
Прошу прощения, если это «базовый» вопрос или я не тестирую производительность должным образом. Если есть способ улучшить этот метод, я буду очень признателен за любой совет.
Спасибо, Андрей
Решение
OpenAccess имеет внутренний объект Database, который создается при первом создании OpenAcccessContext.Он в основном вычисляет все значения по умолчанию, создает кеши, инициализирует другие объекты инфраструктуры и т. Д. Как только он создается, он сохраняется во внутреннем статическом словаре (с ключом connectionID).
Любой другой созданный контекст будет использовать этот внутренний объект и вообще не будет иметь накладных расходов.При этом 1600 мс - это немного выше, вы можете подумать об изменении типа сопоставления (xml оптимален, с точки зрения производительности).
Оптимизация заключается в том, чтобы убедиться, что модель инициализирована в обработчике запуска приложения.Следующий код должен помочь.
родовое словоРЕДАКТИРОВАТЬ: в качестве продолжения указано 0 мс, и это не совсем время выполнения запроса.Запрос возвращает IQueryable, который выполняется позже.Вы должны вызвать ToList (), чтобы получить реальные данные.
Другие советы
Причина может заключаться в том, что открытие базы данных в OpenAccess занимает больше времени, чем в SubSonic.Попробуйте выполнить тривиальную операцию, например, получить счетчик, просто чтобы открыть базу данных, прежде чем измерять время загрузки.Сделайте то же самое и в SubSonic.
родовое словоТомас
Не знаю, не по теме, но я использовал SS2 и SS3 и вносил свой вклад в них в течение последних нескольких лет. Я только что завершил капитальный ремонт и добавил MsAccessProvider в SS2, а генераторы Enum в SS2 и SS3 (они зафиксированы и находятся на странице проекта).
Я также собрал свою собственную структуру кэширования для SS3, которая позволяет автоматическое выборочное кэширование данных (в виде общих словарей) из таблиц в базе данных, на которые ссылается любой уникальный индекс.Мне удалось кэшировать данные поиска для создания веб-страниц на основе шаблонов и улучшить ответ примерно с 2 минут при поиске SS3 LINQ до долей секунды.(Я не публиковал это публично)
Я просто не знаю, где разместить эти материалы, чтобы привлечь внимание пользователей SS.Мои коммиты по источнику и закрытие открытых вопросов не вызвали никакой реакции.