2012-06-22 33 views
11

Tôi tự hỏi liệu có thể tăng tốc truy vấn đầu tiên được thực hiện bằng mã EF trước không.Thời gian khởi động Khuôn khổ thực thể

Tôi đã thực hiện một chương trình thử nghiệm nhỏ với một thực thể có chứa 2 trường và truy vấn đầu tiên mất 2,2 giây, truy vấn thứ hai (giống hệt nhau) mất 0,006 giây.

Tôi đã biên dịch trước chế độ xem, vì vậy sẽ không trợ giúp ở đây. Tôi nghĩ rằng vấn đề là phải mất một thời gian để contruct mô hình trong bộ nhớ, nhưng nó phải mất rằng lâu? Và có cách nào để biên dịch trước mô hình này giống như có quan điểm không?

+1

Đừng nghĩ điều đó là có thể, nhưng có thể tôi đã sai. Xem câu hỏi này để hiểu điều gì đang xảy ra trong truy vấn đầu tiên http://stackoverflow.com/questions/5634338/ef-4-1-code-first-onmodelcreating-call-time –

+0

@ RaphaëlAlthaus Bạn có thể đúng:/Thật kỳ lạ .. Bạn có thể xây dựng mô hình của riêng bạn bằng cách sử dụng lớp DbModelBuilder và sau đó gọi phương thức Build trên đối tượng đó, vì vậy nó có thể làm điều này tại compiletime thay vì thời gian chạy .. Nhưng có lẽ nó không được thực hiện. – nyhjem

+0

Có thể mất chút thời gian để kiểm tra khả năng tương thích lược đồ cơ sở dữ liệu. Bạn có thể kiểm tra điều này bằng cách sử dụng lược tả SQL. –

Trả lời

5

Bài viết này: Squash Entity Framework startup time with pre-compiled views mô tả chi tiết giải pháp.

Nó liên quan đến việc sử dụng Optimize Entity Data Model tùy chọn trong Entity Framework Power Tools để tạo ra một tiền biên dịch .Views tập tin lớp.

+4

Tôi đã thử điều đó, nhưng bây giờ tôi đã làm theo các bước trong bài viết bạn đã liên kết đến. Chế độ xem đang được tạo nhưng lần truy cập đầu tiên vẫn thực sự chậm. Tôi đã thực hiện một bài kiểm tra nhỏ. Đầu tiên tôi truy cập cơ sở dữ liệu với SqlConnection và SqlCommand. Phải mất 0,2 giây. Ngay sau đó tôi sử dụng EF và làm một cái gì đó tương tự (con.Users.Count();). Điều này mất 3,08 giây ..! Sau đó, tôi chạy chính xác cùng một dòng mã, và từ bây giờ nó chỉ mất 0,007 giây .. Vì vậy, rõ ràng EF đang làm một cái gì đó khác hơn là tạo ra quan điểm khi bạn truy cập cơ sở dữ liệu lần đầu tiên .. – nyhjem

4

Khi bạn thực hiện truy vấn đầu tiên, EF khởi tạo chính nó và mất một thời gian. Tôi không nghĩ có nhiều việc phải làm để tăng tốc độ khởi tạo cơ sở hạ tầng của EF nhưng nếu những gì bạn đang thực sự tìm kiếm là tăng tốc truy vấn đầu tiên mà bạn thực hiện và không phải là khởi tạo EF, thì bạn có thể cố gắng bắt đầu EF khởi tạo trước khi chạy truy vấn đầu tiên của bạn.

 using (var db = new MyContext()) 
     { 
      db.Database.Initialize(force: true); 
     } 
+3

force = true will, tốt, buộc reinitialization ngay cả khi đã được khởi tạo cấu trúc của nó infra/internals trước, do đó, không sử dụng vũ lực: true trừ khi bạn đã thay đổi chuỗi kết nối hoặc cấu trúc bảng. –

Các vấn đề liên quan