Performance analyze ADO.NET and Entity Framework

ado.net c# entity-framework performance

Question

Which one gives better performance? ADO.NET or Entity Framework.

These are the two method I want to analyze.

ADO.NET Test Method

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 Test Method

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

Result in first time execution

When I ran this above method in more than 100 times. The average execution time is shown in the image:

first result

ADO.NET took only 2 milliseconds whether Entity Framework took more than 4 milliseconds.

Result in second time execution

When I ran this method again and again in single run. The average execution time between ADO.NET and EF is not much more:

second result

Question

  1. I think EF gives very worst performance in first time execution Then why we use EF?
  2. Why EF second time execution was faster than first time execution?
1
39
2/27/2013 9:23:34 AM

Accepted Answer

  1. First time EF loads metadata into memory, that takes a time. It builds in-memory representation of model from edmx file, or from source code if you are using code first. Actually EF is build at the top of ADO.NET, so it can't be faster. But it makes development much faster. And improves maintainability of your code.
  2. See 1

Take a look on msdn article Performance Considerations (Entity Framework)

58
2/27/2013 9:30:44 AM

Popular Answer

  • 1) EF makes a lot of things more comfortable when working with databases. There is a lot going on under the hood that you otherwise would have to code manually.

For example, one of my first bigger projects was dealing a lot with data and I implemented the access layer with ADO.NET. This made up for something between a quarter or even a third of the whole project.

With my experience of the EF today I could get rid of nearly all of that! I just makes lots of the complicated code I wrote by hand completely unneccessary. We are talking about thousands of lines here.

  • 2) Two main reasons here. First, EF is built on top of using ADO.NET. This means that everthing EF does, add more overhead to whatever ADO would do. Second (very) simply put, the JIT compiler compiles the code for the first time just when it is executed. This includes memory allocation and all sorts of initializations.

This means that code you run multiple times runs much faster from the second time on. If you execute your EF queries only once, on the other hand, you will have no gains from those initializations.

In a real world application you might try to do some optimizations like using Compiled Queries. Performance wise this will help you a lot because now your queries do not need to be prepared and compiled each time you run them but only once.



Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow