mercredi 26 septembre 2007 10:42
par
Danuz
ADO .NET: Connection et performances
Je ne sais pas pour vous, mais il m'arrive souvent de passer du temps à réfléchir sur l'optimisation des performances des applications que je peux développer. (Et pourtant, je n'utilise pas des outils spécialement liés à l'analyse de ces performances ...). Enfin, tout ça pour dire que, en développant une sorte d'Adapter ou de DBHelper (oui, je sais que ça existe déjà, mais, j'ai des besoins spécifiques !
), je me suis intéressé à l'éxécution de plusieurs requêtes T-SQL groupées (des lots de 200 requêtes, 5000 requêtes, puis 10000 requêtes de suite), ainsi qu'à l'ouverture des connections vers la base de données. (Je travaille dans un contexte non multi-threadé (
)).
Voici un exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
Stopwatch watcher = new Stopwatch(); Console.WriteLine("Executing 200 queries with 200 Opening..."); watcher.Start(); for (int i = 0; i < 200; i++) { using (SqlConnection oConn = new SqlConnection(m_ConnectionString)) { using (SqlCommand oComm = new SqlCommand()) { String query = "INSERT INTO Users (FName, LName) VALUES ('F" + i.ToString() + "','L" + i.ToString() + "')"; oComm.CommandText = query; oComm.Connection = oConn; oConn.Open(); oComm.ExecuteNonQuery(); } } }
watcher.Stop(); Console.WriteLine("{0} ticks", watcher.ElapsedMilliseconds.ToString()); Console.WriteLine();
Console.WriteLine("Executing 200 queries with 1 Opening..."); using (SqlConnection oConn = new SqlConnection(m_ConnectionString)) { using (SqlCommand oComm = new SqlCommand()) { oConn.Open(); watcher.Reset(); watcher.Start(); for (int i = 0; i < 200; i++) { String query = "INSERT INTO Users (FName, LName) VALUES ('F" + i.ToString() + "','L" + i.ToString() + "')"; oComm.CommandText = query; oComm.Connection = oConn; oComm.ExecuteNonQuery(); } watcher.Stop(); } } Console.WriteLine("{0} ticks", watcher.ElapsedMilliseconds.ToString()); Console.WriteLine(); |
Si je prends cet exemple et que je l'exécute pour 200, 5000, puis 10000 requêtes de suite, j'obtiens les résultats suivants :
Executing 200 queries with 200 Opening...
487 ticks
Executing 200 queries with 1 Opening...
247 ticks
Executing 5000 queries with 5000 Opening...
8249 ticks
Executing 5000 queries with 1 Opening...
6991 ticks
Executing 10000 queries with 10000 Opening...
21648 ticks
Executing 10000 queries with 1 Opening...
14148 ticks
Je pense que les résultats sont suffisamment explicites.. Et nous le savions déjà tous ...
Bon, je vais nettoyer ma table ... ça fait un moment que je fais les tests...
Bonne journée & A+ !
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :