Как быстрее читать данные в Entity Framework из SQL Server Compact C # - PullRequest
0 голосов
/ 24 сентября 2019

Я использовал SQL Server Compact edition v4.

Когда я получаю новое от сущностей, это занимает 1 секунду, но когда я считаю из таблицы только с одной записью, это занимает 4 секунды.

Я использовал Entity Framework и SQL Server Compact Edition.

В чем причина такой медленной скорости на компьютерах с низкой конфигурацией?

var db = new Entities();    // 1 second
db.User.count();            // 4 seconds

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Первый запрос, который вы выполняете для первого экземпляра DbContext, запускает статическую настройку для DbContext.Здесь все сопоставление разрешается, так что DbContext готов работать с DbSets и связанными объектами.Чем больше определений сущностей имеет дело с контекстом, тем дольше это может занять.

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

using (var context = new Entities())
{
   bool result = context.Users.Any();
}

Это гарантирует, что статическое определение контекста установлено и все последующие экземпляры контекста будут готовы к немедленному выполнению.Обратите внимание, что эта стоимость только для первого экземпляра DbContext, у вас нет этой стоимости с дополнительными экземплярами DbContext.Эти экземпляры должны быть недолговечными и ограничиваться блоком использования, чтобы гарантировать их удаление.Для мобильного приложения вы можете рассмотреть один более долгоживущий DbContext, но я бы с осторожностью выбирал отслеживаемые объекты (вместо этого используйте AsNoTracking () при загрузке объектов, которые вы не редактируете).Отслеживаемые объекты могут поглотить ограниченные ресурсы и потенциально вызвать проблемы с производительностью в будущем.

1 голос
/ 24 сентября 2019

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

...