約16,500の都市のテーブルを含むデータベースと、そのデータベースのEFデータモデル(データベースファースト)があります。私はそれらをコードでメモリにプリロードします:
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
最初のクエリは高速(〜10ms)ですが、2番目のクエリは最初の実行に約2.3秒かかります(ただし、その後に呼び出されたときの最初のクエリよりも高速です)。
SQL Server Profilerは、最初のクエリが別のマシンのデータベースにヒットしていることを確認しますが、2番目のクエリはそうではないため、これは意味がありません。
をオフDb.Configuration.AutoDetectChangesEnabled
にして、ビューを事前に生成してみました。
速くするために何ができ.Local
ますか?(このアプリケーションを実行しているすべてのクライアントが高速LAN上にあるわけではありません。)