14

Tôi đã tìm kiếm các tiêu chuẩn hiệu suất gần đây so sánh L2S và EF và không thể tìm thấy bất kỳ thủ tục nào được kiểm tra được lưu trữ bằng cách sử dụng phiên bản EF đã phát hành. Vì vậy, tôi đã chạy một số thử nghiệm của riêng mình và tìm thấy một số kết quả thú vị.LINQ to Sql vs Entity Framework Performance

Các kết quả này có đúng không? Tôi có nên thử nghiệm nó theo một cách khác không?

Một thể hiện của bối cảnh, một tiếng gọi của sproc: (chết liên kết)

Một thể hiện của bối cảnh, nhiều cuộc gọi của sproc cùng: (link chết)

Nhiều trường hợp ngữ cảnh, nhiều cuộc gọi của cùng một sproc: (liên kết chết)

+0

Điều gì sẽ xảy ra khi bạn đặt đường tạo ngữ cảnh trong khối sử dụng()? Những cuộc gọi dài hơn có thể là do hệ thống không có kết nối trong hồ bơi ...? –

+2

Bạn cũng có thể muốn cập nhật điểm chuẩn, xóa và chèn hiệu suất. – DamienG

+0

Mã dữ liệu của bạn có thường trông như thế này không? Bằng cách nào đó nó không xuất hiện để trông giống như mã truy cập dữ liệu thực ... Thử nghiệm cho các vòng không có gì chung với những gì các mẫu truy cập dữ liệu thực tế trông như thế nào. –

Trả lời

7

Tôi nghĩ bạn nên thử nghiệm theo cách hơi khác, để phân biệt startup costs vs. execution costs. Khung thực thể, đặc biệt, có số lượng lớn startup costs resulting from the need to compile database views (mặc dù bạn có thể thực hiện việc này trước). Tương tự, LINQ có khái niệm về compiled query, điều này sẽ phù hợp nếu thực hiện truy vấn nhiều lần.

Đối với nhiều ứng dụng, chi phí thực hiện truy vấn sẽ quan trọng hơn chi phí khởi động. Đối với một số người, điều ngược lại có thể đúng. Vì đặc tính hiệu suất của chúng là khác nhau, tôi nghĩ điều quan trọng là phải phân biệt chúng. Đặc biệt, tính trung bình chi phí khởi động vào chi phí trung bình của một truy vấn được thực hiện nhiều lần là gây hiểu lầm.

+0

Nhưng sẽ không những kết quả này phản ánh cách mọi thứ sẽ làm việc trong một ứng dụng asp.net? Kể từ khi tôi không thể thực sự giữ một ví dụ hoặc bối cảnh 'sống' tôi phải thực hiện một cái mới trên mỗi yêu cầu và gọi thủ tục được lưu trữ. – Vyrotek

+0

Không, không nhất thiết.Bạn có thể biên dịch trước các khung nhìn Entity Framework, trong trường hợp này bạn không phải trả chi phí đó khi tạo ra một ngữ cảnh. Ngay cả đối với những thứ không thể được biên dịch trước, việc theo dõi các mục này riêng biệt làm rõ sự khác biệt giữa yêu cầu thực hiện một truy vấn và một truy vấn 100. –

2

Tôi đã thực hiện một vài trang asp.net thử nghiệm để xem trang nào hoạt động tốt hơn. thử nghiệm của tôi là:

Xóa 10.000 hồ sơ Chèn 10.000 hồ sơ Sửa 10.000 hồ sơ DataBind 10.000 bản ghi vào một GridView và hiển thị trên trang

tôi đã mong LinqToSQL được nhanh hơn nhưng làm LinqToSQL trên mất gần 2 phút trong khi LinqToEntities mất ít hơn 20 giây.

Ít nhất cho thử nghiệm này có vẻ như LinqToEntities nhanh hơn. Kết quả của tôi dường như cũng phù hợp với bạn.

Tôi chưa thử Chèn/Chỉnh sửa/Xóa/Hiển thị nhiều hơn 1 bảng được nối với nhau.

Tôi quan tâm đến việc tìm hiểu thêm ... hoặc nếu thử nghiệm của tôi không phải là một loại thử nghiệm hợp lệ, tôi muốn được xem xét một số thử nghiệm thực tế.

+1

Tôi hiểu đây là một bài đăng cũ nhưng nếu bạn vẫn quan tâm, tôi đã thực hiện một số kiểm tra với EF có sẵn tại đây (http://blog.staticvoid.co.nz/2012/03/entity-framework-comparative.html). tôi tìm thấy L2S chậm hơn nhiều ở các bản cập nhật nhưng tôi rất muốn biết tại sao (và nếu có cách để cải thiện nó). L2S nhanh hơn nhiều ở các lựa chọn mặc dù –

+0

Công việc tuyệt vời. Tôi xa một chuyên gia về cơ sở dữ liệu và ORM, nhưng tôi thích những gì các bài kiểm tra của bạn cho thấy. Gần đây tôi cũng đã đọc một bài báo từ nhóm ADO.net về cải thiện EF5: http://blogs.msdn.com/b/adonet/archive/2012/02/14/sneak-preview-entity-framework-5-0- Hiệu suất-cải thiện.aspx – dtc

+0

cảm ơn, vâng, nhóm EF đã làm một số công cụ khá thú vị gần đây về hiệu suất, thú vị nhất là dường như đã được thực hiện bên trong dot net 4.5 không phải là các tệp nhị phân của EF. techs khác nhau một tăng. –