2010-01-15 41 views
7

Tôi có một truy vấn trên trang của mình mất ít nhất nửa giây để thực thi bằng EF 3.5. Khi tôi sử dụng một thủ tục lưu trữ, tốc độ nhanh hơn đáng kể. Nó là một truy vấn rất phức tạp. Sẽ có bất kỳ cải tiến hiệu suất nào trong phiên bản EF 4.0 sắp tới? Và liệu EF 4.0 có thực sự đánh bại hiệu suất 3,5?Hiệu suất của khung thực thể 4 so với khung thực thể 3.5 như thế nào?

+1

Về câu hỏi phụ, bạn có nhìn vào sự khác biệt trong kế hoạch thực hiện giữa quy trình lưu trữ của bạn và quy trình được tạo bởi EF 3.5 không? – Kane

Trả lời

3

Câu trả lời ngắn gọn là còn quá sớm để nói. Các .Net guys đang tập trung gần như hoàn toàn vào hiệu suất cho đến khi phát hành vào ngày 12 tháng 4 đã được hoàn thành và bản địa hoá. Ngoài ra, điều gì có nghĩa là nhanh hơn? Nhanh hơn có thể được xem bằng nhiều cách, ví dụ:

  • Entity Framework 4.0 has new features, những cải tiến theo dõi đối tượng mình có thể có nghĩa là chiến thắng rất lớn kể từ khi bạn không làm điều đó công việc tay chân mình ... trong mọi trường hợp, ít nhất của sự phát triển nhanh hơn .
  • Nếu trước đó không hoạt động, các đối tượng có trọng lượng nhẹ hơn với POCOsupport có thể có nghĩa là ít bộ nhớ bị dịch chuyển khi xử lý nhiều đối tượng. Không có vấn đề làm thế nào nhỏ chi phí của các thuộc tính phụ được dân cư khi lấy từ DB, có một chi phí cả trong instantiating và theo dõi chúng (thời gian tải và bộ nhớ tiêu thụ).

Trong trường hợp cụ thể của bạn, một nửa thứ hai là một lâu thời gian cho bất cứ điều gì nhưng một truy vấn khối lượng rất phức tạp hoặc cao ... bạn đã nhìn thấy bao nhiêu thời gian là chi tiêu trong cơ sở dữ liệu và bao nhiêu thời gian được dùng một lần. Net có dữ liệu? Nếu bạn dành phần lớn thời gian của bạn bên ngoài SQL thì có, những cải tiến cơ sở trong phản ánh trong Net 4.0 sẽ cung cấp cho bạn một số cải thiện tốc độ ... tuy nhiên nếu bạn đang dành tất cả thời gian của bạn trong SQL, nó sẽ không giúp đỡ nhiều ở tất cả. Phần lớn các vấn đề hiệu suất của bạn có thể được lập chỉ mục của SQL được tạo ra và không thực hiện hydity Framework Entity.

Tôi sẽ theo nhận xét của Kane, xem SQL nó tạo ra cho truy vấn của bạn, bạn có thể đăng bài này và thủ tục được lưu trữ nhanh chóng để chúng tôi có thể tìm thấy vấn đề nằm ở đâu?

1

Từ ADO.NET blog:

Tuỳ chỉnh Queries - Thêm hỗ trợ cho các nhà khai thác LINQ hiện có, nhận một bộ lớn các mẫu với LINQ, viết mô hình định nghĩa chức năng cùng với khả năng sử dụng những trong LINQ và một số cách khác nhau để tạo và tùy chỉnh các truy vấn khác.

SQL hệ Độ khó Cải tiến - Nâng cao dễ đọc, cùng với TSQL tối ưu hóa hiệu suất, các truy vấn được tạo ra để làm cho nó nhiều dễ dàng hơn để hiểu những gì đang xảy ra

Vì vậy, hai điểm này có nghĩa bạn có thể xem các cải tiến trong cách tạo truy vấn của bạn từ LINQ. Tuy nhiên, có khả năng ORM sẽ không thể thực hiện một truy vấn bạn đã viết từ đầu vì nó phải phục vụ cho rất nhiều kịch bản khác nhau và thường là một trong những trường hợp phổ biến nhất được mặc định. EF 3.5 dường như sản xuất một số SQL tham gia rất hiệu quả khi tôi sử dụng nó, có lẽ là tốt nhất tôi đã nhìn thấy từ một ORM vì vậy có hy vọng bạn có thể mương SP trong 4.0.

Nếu bạn đã có một thủ tục lưu trữ, tôi đoán đây là một truy vấn lớn - việc gửi văn bản SQL này mỗi lần đến máy chủ sẽ gây ra nhiều lưu lượng mạng, đó là một điều khác mà bạn có thể hoặc có thể chưa cân nhắc. Rõ ràng trên cùng một máy chủ hoặc bên trong cùng một mạng nội bộ, đây là cách tối ưu hóa 'cắt tóc của bạn để giảm cân'.

0

Khi nói đến các truy vấn thực sự phức tạp, tôi đã không thấy bất kỳ bằng chứng nào cho thấy bất kỳ L2S, NH hoặc EF nào có thể tạo ra một kế hoạch truy vấn tốt hơn tôi có thể trong một sproc. Tôi yêu ORM (đặc biệt là NH), nhưng vẫn còn thời gian khi Thời gian thực hiện ORM có thể bị hạn chế bởi một sproc được viết tốt.

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