J'ai comparé deux requêtes qui récupèrent des données assez volumineuses à partir d'une table de base de données. Pour la première question, j'ai utilisé Linq To Sql et pour l'autre, j'utilise passthrough SQL via ADO.NET. Je sais que Linq To Sql doit faire beaucoup de travail dans les coulisses, mais que fait-il réellement? Les deux requêtes récupèrent la même quantité de données, mais la requête Linq To Sql est plus lente de plus de 5 secondes et utilise 150 Mo de RAM de plus!Pourquoi la liaison de données Linq To Sql vers gridview est-elle beaucoup plus lente que le SQL direct?
Voici mon code de test:
LINQ Pour 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();
}
Passthrough SQL + 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();
}
Avez-vous testé cela lorsque le processus n'est pas attaché au débogueur? –
J'ai rencontré des problèmes similaires avec NHibernate. Je ne suis pas sûr de ce qu'est le big secetet "derrière l'écran" mais je suppose que les outils ORM sont lents .... – Dani
@Dani - "Les outils ORM sont lents" ne découlent pas des essais de performance de databinding. C'est une déclaration ** très ** générale (et, à mon humble avis, trompeuse). – TrueWill