Ich habe zwei Abfragen verglichen, die einige ziemlich große Daten aus einer Datenbanktabelle abrufen. Für die Abfrage eins verwendete ich Linq To Sql und für die andere verwende ich Passthrough SQL über ADO.NET.Warum ist Linq To Sql die Datenbindung an Gridview wesentlich langsamer als an Pass-Through-SQL?
Ich weiß, dass Linq To Sql hinter den Kulissen viel arbeiten muss, aber was macht es eigentlich? Die zwei Abfragen rufen die gleiche Menge an Daten ab, aber die Linq To Sql-Abfrage ist mehr als 5 Sekunden langsamer und benötigt 150 MB mehr RAM!
Hier ist mein Testcode:
Mit LINQ to SQL:
public void MakeList()
{
int start = Environment.TickCount;
var document = from d in _dm.tDokuments select d;
List<tDokument> documentList = document.ToList();
int end = Environment.TickCount;
GridView1.DataSource = documentList;
GridView1.DataBind();
Label1.Text = (end - start).ToString();
}
SQL Pass-Through + ADO.NET:
public void MakeList()
{
int start = Environment.TickCount;
SqlCommand sqlCommand = new SqlCommand("SELECT * FROM tDokument", _connection);
SqlDataAdapter da = new SqlDataAdapter(sqlCommand);
DataSet ds = new DataSet();
da.Fill(ds);
int end = Environment.TickCount;
GridView1.DataSource = ds;
GridView1.DataBind();
Label1.Text = (end - start).ToString();
}
Haben Sie dies getestet, wenn der Prozess nicht mit dem Debugger verbunden ist? –
Ich habe ähnliche Probleme mit NHibernate gefunden. Ich bin nicht sicher, was ist das große Seceret "hinter dem Bildschirm", aber ich denke, ORM-Tools sind langsam .... – Dani
@Dani - "ORM-Tools sind langsam" folgt nicht aus Databinding-Performance-Studien. Das ist eine sehr allgemeine (und irreführende) Erklärung. – TrueWill