2013-02-27 55 views
30

Cái nào mang lại hiệu suất tốt hơn? ADO.NET hoặc khung thực thể.Hiệu suất phân tích ADO.NET và Entity Framework

Đây là hai phương pháp tôi muốn phân tích.

ADO.NET Phương pháp thử Phương pháp

public void ADOTest() 
{ 
    Stopwatch stopwatch = Stopwatch.StartNew(); 
    using (SqlConnection con = new SqlConnection(connection)) 
    { 
     string Query = "select * from Product "; 
     SqlDataAdapter da = new SqlDataAdapter(Query, con); 
     DataSet ds = new DataSet(); 
     con.Open(); 
     da.Fill(ds); 
     DataView dv = ds.Tables[0].DefaultView; 
    } 
    stopwatch.Stop(); 
    Console.WriteLine("ADO.NET Time Elapsed={0}", stopwatch.Elapsed); 
} 

Entity Framework thử nghiệm

public void EFTest() 
{ 
    Stopwatch stopwatch = Stopwatch.StartNew(); 
    var list = _OnlineStoreEntities.Products.ToList(); 
    stopwatch.Stop(); 
    Console.WriteLine("Entity Framework Elapsed={0}", stopwatch.Elapsed); 
} 

quả trong thực hiện lần đầu tiên

Khi tôi chạy phương pháp trên đây trong hơn hơn 100 lần. Thời gian thực hiện trung bình được thể hiện trong hình ảnh:

first result

ADO.NET chỉ mất 2 mili giây liệu Entity Framework mất hơn 4 mili giây.

quả trong thực hiện lần thứ hai

Khi tôi chạy phương pháp này một lần nữa và một lần nữa trong chạy duy nhất. Thời gian thực hiện trung bình giữa ADO.NET và EF không phải là nhiều hơn nữa:

second result

Câu hỏi

  1. Tôi nghĩ EF mang lại cho hiệu suất rất tồi tệ nhất trong thực hiện lần đầu tiên thì tại sao chúng ta sử dụng EF?
  2. Tại sao thực hiện lần thứ hai của EF nhanh hơn lần thực hiện lần đầu?
+0

https://stackoverflow.com/questions/15107992/performance-analyze-ado-net-and-entity-framework – Omkar

Trả lời

51
  1. Lần đầu tiên EF tải siêu dữ liệu vào bộ nhớ, mất một khoảng thời gian. Nó xây dựng đại diện bộ nhớ trong mô hình từ tệp edmx hoặc từ mã nguồn nếu bạn đang sử dụng mã đầu tiên. Trên thực tế EF được xây dựng ở trên cùng của ADO.NET, vì vậy nó không thể nhanh hơn. Nhưng nó làm cho phát triển nhiều hơn nhanh hơn. Và cải thiện khả năng bảo trì mã của bạn.
  2. Xem 1

Hãy xem trên MSDN bài viết Performance Considerations (Entity Framework)

+1

EF sẽ nhanh hơn nếu bạn sử dụng LINQ để tìm nạp hoặc xử lý dữ liệu chọn lọc từ cơ sở dữ liệu. Một truy vấn SQL lớn hoặc phức tạp có thể được thực hiện như truy vấn LINQ đơn giản chạy nhanh hơn trong EF hơn ADO.NET. Chúng ta không nên so sánh ADO.NET với EF chỉ để lấy dữ liệu đơn giản. – rafidheen

+0

Tôi nghĩ rằng nó khá chủ quan mà LINQ đơn giản hơn SQL khi nói đến các truy vấn phức tạp. – user441521

10
  • 1) EF làm rất nhiều thứ thoải mái hơn khi làm việc với cơ sở dữ liệu. Có rất nhiều đang xảy ra dưới mui xe mà bạn nếu không sẽ phải mã bằng tay.

Ví dụ: một trong những dự án lớn đầu tiên của tôi đã xử lý rất nhiều dữ liệu và tôi đã triển khai lớp truy cập bằng ADO.NET. Điều này tạo nên một cái gì đó giữa một phần tư hoặc thậm chí một phần ba của toàn bộ dự án.

Với kinh nghiệm của tôi về EF hôm nay, tôi có thể loại bỏ gần như tất cả những điều đó! Tôi chỉ tạo ra rất nhiều mã phức tạp mà tôi đã viết bằng tay hoàn toàn không cần thiết. Chúng ta đang nói về hàng ngàn dòng ở đây.

  • 2) Hai lý do chính ở đây. Đầu tiên, EF được xây dựng dựa trên việc sử dụng ADO.NET. Điều này có nghĩa là mọi thứ EF làm, bổ sung thêm chi phí cho bất cứ điều gì ADO sẽ làm. Thứ hai (rất) chỉ cần đặt, trình biên dịch JIT biên dịch mã lần đầu tiên ngay khi nó được thực hiện. Điều này bao gồm phân bổ bộ nhớ và tất cả các loại khởi tạo.

Điều này có nghĩa là mã bạn chạy nhiều lần chạy nhanh hơn nhiều từ lần thứ hai trở đi. Nếu bạn thực hiện truy vấn EF của bạn chỉ một lần, mặt khác, bạn sẽ không có lợi nhuận từ những khởi tạo đó.

Trong ứng dụng thế giới thực, bạn có thể thử thực hiện một số tối ưu hóa như sử dụng Compiled Queries. Hiệu suất khôn ngoan này sẽ giúp bạn rất nhiều bởi vì bây giờ các truy vấn của bạn không cần phải được chuẩn bị và biên soạn mỗi lần bạn chạy chúng mà chỉ một lần.

1

Trong khi làm việc tại Microsoft, tôi đã viết một bài đăng trên blog so sánh hiệu suất của cả hai. Dường như hiện tại đang trong quá trình di chuyển, vì vậy bạn có thể cần truy cập vào kho lưu trữ Internet để tìm ...

Chúng tôi đã tập trung rất nhiều vào việc đảm bảo chi phí hiệu quả của việc sử dụng EF không khủng khiếp, hoàn hảo trong V1 nhưng khá hữu dụng.

Trong khi gần 10 năm sau, nhóm EF đã thực hiện một công việc cải thiện hiệu suất, đặc biệt là giảm các tình huống xấu, bằng cách thiết kế khung thực thể nằm trên ADO.Net. Vì vậy, nếu tiêu chí chính của bạn là hiệu suất thô, bạn nên đi cho ADO.Net, với SQL được tối ưu hóa bằng tay.

Điều đó đang được nói, nhiều nhà phát triển giỏi khác, không tạo SQL tốt nhất; Entity Framework cô lập chúng bằng cách viết các truy vấn và sử dụng các phương pháp hay để tạo ra các truy vấn hợp lý tốt.

Ưu điểm chính của Khung thực thể là cung cấp mức trừu tượng cao hơn để làm việc với dữ liệu, cách ly nhà phát triển ứng dụng khỏi mô hình dữ liệu cơ bản. Vì vậy, bạn sẽ sử dụng EF để làm việc hiệu quả hơn, viết ít mã truy cập dữ liệu hơn; bạn vẫn có thể tinh chỉnh các truy vấn cụ thể hoặc các hoạt động dữ liệu, mà không làm mất sự trừu tượng làm cho lập trình dễ dàng hơn trên mã không hiệu suất quan trọng, đó là phần lớn nhất của bất kỳ ứng dụng kinh doanh nào.

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