У меня есть база данных с таблицей примерно из 16 500 городов и модель данных EF (Database-First) для этой базы данных. Я предварительно загружаю их в память с помощью кода:
Db.Cities.Load()
... затем, когда пришло время их использовать, я пробовал каждый из следующих запросов:
Dim cities() As String = Db.Cities.Select(Function(c) c.CityName).ToArray
Dim cities() As String = Db.Cities.Local.Select(Function(c) c.CityName).ToArray
Первый запрос быстрый (~ 10 мс), но второй занимает около 2,3 секунды для первого запуска (хотя он быстрее, чем первый запрос, когда он вызывается после этого).
Это не имеет смысла, поскольку SQL Server Profiler проверяет, попадает ли первый запрос в базу данных на другой машине, а второй — нет!
Я пытался отключить Db.Configuration.AutoDetectChangesEnabled
и пробовал предварительно генерировать представления.
Что я могу сделать, чтобы .Local
работал быстрее? (Не все клиенты, работающие с этим приложением, будут находиться в быстрой локальной сети.)