Telerik OpenAccess против SubSonic в простом тесте скорости (не «что лучше»)

StackOverflow https://stackoverflow.com/questions/9385950

Вопрос

Я использую 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.Мои коммиты по источнику и закрытие открытых вопросов не вызвали никакой реакции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top