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 ! Big Smile), 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é ( Big Smile )).

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+ !