Chaque chiffre de cette page a été mesuré sur une seule machine avec les portes de performance QA de sgcGrid et deux programmes de benchmark livrés avec la suite QA. Rien n'est estimé ni extrapolé. Exécutez les mêmes programmes sur votre propre matériel et votre propre base de données pour obtenir vos chiffres.
EN BREF
Les chiffres clés
Mesure
Win32
Win64
Image de 1920 x 1080 d'une grille de 100 000 lignes, 12 colonnes (porte QA C1)
1,47 ms
1,29 ms
La même image avec des cellules clignotantes et 3 règles de format
1,67 ms
1,46 ms
Mises à jour en direct depuis un thread de travail dans une grille triée de 1 000 lignes, images rendues à 60 Hz
1 000 mises à jour/s à 60,0 ips, 0 image manquée
1 000 mises à jour/s à 60,0 ips, 0 image manquée
Cadence maximale de mise à jour d'un thread de travail tant que la même grille tient 60 ips
1 552 858 mises à jour/s
2 001 921 mises à jour/s
Mode serveur, table SQLite de 10 000 000 de lignes : ouverture jusqu'à la première page dessinée
non exécuté
117,3 ms (2,1 ms avec le nombre estimé)
Mesuré le 2026-11-04. Les tableaux ci-dessous donnent la méthode, la machine et chaque chiffre.
MÉTHODE
Comment les chiffres sont mesurés
Images
Une image est la fenêtre visible d'une grille de 1920 x 1080, rendue sans fenêtre par TsgcGridRenderer sur le canevas raster, le même code qui dessine les grilles VCL et FireMonkey. Il n'y a ni fenêtre ni GPU dans la boucle. La grille défile un peu à chaque image, comme le fait une grille en direct. C1 et les autres portes d'image prennent la médiane de 5 exécutions de 60 images après un échauffement.
Opérations sur le modèle
Le regroupement, le filtrage, le tri et les synthèses s'exécutent sur le modèle de données de la grille, sans moteur de rendu. Chaque chiffre est la médiane de 5 exécutions après un échauffement, ou la meilleure de 12 exécutions entrelacées quand la porte le précise. Chaque porte a un budget, et l'exécution QA échoue quand un chiffre le dépasse.
Mises à jour en direct
Un thread de travail écrit des mises à jour de prix avec UpdateRow, sûr entre threads, comme le fait la démo LiveTicker. Le thread principal rend une image toutes les 16,67 ms (60 Hz). Chaque image retrie la vue modifiée, comme le fait une grille dessinée. Le benchmark indique les mises à jour écrites par seconde, les images rendues par seconde, les images qui ont manqué leur créneau et le temps de rendu par image.
Mode serveur
TsgcGridServerProvider_DataSet pagine une table générée via FireDAC. Chaque étape se termine quand ses lignes sont chargées et l'image dessinée. Chaque chiffre est la médiane de 5 exécutions après un échauffement, avec le fichier de base de données dans le cache du système d'exploitation. Les sauts tombent à 2 000 lignes d'écart d'une exécution à l'autre, de sorte que chaque exécution lit dans la base de données et non dans le cache de pages de la grille.
Delphi 13 (compilateur 37.0), builds release Win32 et Win64
Base de données
SQLite 3.42.0 via FireDAC, intégré et lié statiquement
Sources
arbre de développement de sgcGrid du 2026-11-04 (révision svn 20169 avec modifications locales)
La machine était un poste de développement, pas un serveur de benchmark isolé. Chaque exécution lourde a tenu un verrou à l'échelle de la machine, si bien qu'aucune compilation ni aucun test ne tournait en même temps.
CLIENT
Portes de performance QA
Le groupe perf de la suite QA de sgcGrid, exécuté seul sur Win32 et Win64. Le budget est la limite que la porte impose (Win32 / Win64).
Porte
Ce qui est mesuré
Win32
Win64
Budget
C1
Image plate 1920 x 1080, 12 colonnes, 100 000 lignes
1,47 ms
1,29 ms
4,09 / 4,32 ms
Stylée
La même image, cellules clignotantes et 3 règles de format (moyenne de 60 images)
1,67 ms
1,46 ms
25 / 16 ms
GW3
Image avec surlignage de recherche, 100 000 lignes
1,43 ms
1,75 ms
25 / 16 ms
GW5
Image avec 20 colonnes, 3 niveaux de bandes, 2 colonnes figées, 100 000 lignes
1,62 ms
1,42 ms
25 / 16 ms
GW7
Image avec colonnes d'image, de progression et de sparkline de 30 points, 100 000 lignes
2,20 ms
3,20 ms
25 / 16 ms
F1
Image avec 2 colonnes figées et un pied de page, défilée dans les deux sens, 100 000 lignes
0,56 ms
0,50 ms
25 / 16 ms
G4
Image de 1 000 000 de lignes regroupées sur 2 colonnes, tout développé
0,49 ms
0,48 ms
25 / 16 ms
D1
Image avec 3 bandes de détail visibles de 50 lignes chacune
2,47 ms
2,65 ms
25 / 16 ms
G1
Regrouper 100 000 lignes sur 2 colonnes, 2 synthèses, construire et aplatir
15,11 ms
11,98 ms
60 / 40 ms
G2
Regrouper 1 000 000 de lignes sur 2 colonnes, 2 synthèses, construire et aplatir
155,37 ms
132,61 ms
700 / 450 ms
G3
Développer ou réduire un groupe de la vue de 1 000 000 de lignes
4,16 ms
3,28 ms
25 / 15 ms
G5
Synthèses de pied de page, 5 colonnes de 100 000 lignes
5,64 ms
2,34 ms
25 / 15 ms
T1
Arbre de 100 000 lignes, profondeur jusqu'à 8, construire et aplatir entièrement développé
20,42 ms
22,80 ms
90 / 60 ms
GW0
Reconstruction de la vue triée, 1 000 000 de lignes
253,45 ms
240,29 ms
268,24 / 259,62 ms
GW1
Valeurs distinctes d'une colonne de texte de 1 000 membres, avec un filtre en cascade, 1 000 000 de lignes
55,61 ms
48,42 ms
450 / 300 ms
GW2
Filtre avec une liste de 500 valeurs sur 1 000 plus une condition, 1 000 000 de lignes
50,75 ms
48,02 ms
225 / 150 ms
M1
Mémoire de la vue en lignes au-dessus des données, 1 000 000 de lignes regroupées sur 2 colonnes
20,07 MB
20,09 MB
32 MB
X1
Export XLSX de 100 000 lignes x 12 colonnes, 2 niveaux de groupe, synthèses
1 693,87 ms
1 002,71 ms
4 500 / 3 000 ms
L2
Visionneuse de journal qui suit la fin pendant qu'un thread ajoute 10 000 lignes par seconde : images dessinées par seconde
38,87 ips
38,67 ips
20 ips minimum
L2
La même exécution : 99e centile du délai de saisie
4,22 ms
2,83 ms
33 ms
EN DIRECT
Mises à jour en direct à 60 ips
sgcGridBench_Live : un thread de travail écrit le prix, la variation, le volume et l'heure d'une ligne aléatoire avec UpdateRow, pendant que le thread principal rend une grille triée et clignotante de 1920 x 1080 toutes les 16,67 ms. 5 secondes par cas. Un créneau manqué est une image terminée après le début de la suivante.
Lignes
Cadence visée
Plateforme
Mises à jour/s
Images/s
Créneaux manqués
Rendu, médiane
Rendu, p99
Rendu, max
1 000
1 000/s
Win32
1 000
60,0
0
1,28 ms
2,46 ms
2,57 ms
1 000
1 000/s
Win64
1 000
60,0
0
1,36 ms
2,41 ms
2,45 ms
1 000
10 000/s
Win32
9 998
60,0
0
1,43 ms
2,79 ms
2,98 ms
1 000
10 000/s
Win64
9 998
60,0
0
1,29 ms
2,46 ms
3,17 ms
1 000
le plus vite possible
Win32
1 552 858
60,0
0
1,26 ms
3,09 ms
3,35 ms
1 000
le plus vite possible
Win64
2 001 921
60,0
0
1,26 ms
2,54 ms
3,28 ms
100 000
1 000/s
Win32
1 000
60,0
0
10,52 ms
13,72 ms
15,92 ms
100 000
1 000/s
Win64
1 000
60,0
0
10,50 ms
13,99 ms
14,68 ms
100 000
10 000/s
Win32
9 966
47,6
62
14,70 ms
40,33 ms
42,03 ms
100 000
10 000/s
Win64
9 997
54,2
29
13,59 ms
35,10 ms
39,86 ms
Une grille triée de 100 000 lignes retrie sa vue à chaque image où la colonne triée a changé, si bien que son temps de rendu croît avec le nombre de lignes. Les mises à jour de colonnes non triées conservent la vue, et MaxFPS peut abaisser la cadence d'une grille qui doit seulement avoir l'air en direct.
MODE SERVEUR
Tables de base de données de 1 000 000 et 10 000 000 de lignes
sgcGridBench_Server sur SQLite 3.42.0, Win64. La table a 12 colonnes de types variés (entier, texte, flottant, date et heure, booléen), une clé entière indexée et une colonne client indexée, avec des données déterministes. Chaque étape se termine avec ses lignes chargées et l'image 1920 x 1080 dessinée. Médiane de 5 exécutions après un échauffement.
Étape
1 000 000 de lignes
10 000 000 de lignes
Ce qui s'exécute sur la base de données
Ouverture jusqu'à la première page dessinée
2,8 ms
117,3 ms
Colonnes du schéma, COUNT(*) exact, première page
Ouverture avec le nombre estimé
2,1 ms
2,1 ms
CountMode = gscEstimated : première page seulement, le nombre croît tant que les pages reviennent pleines
Nombre exact de lignes
0,2 ms
115,6 ms
SELECT COUNT(*)
Saut au milieu
40,1 ms
378,8 ms
Une page à la ligne médiane, LIMIT et OFFSET
Saut à la fin
75,0 ms
735,4 ms
La dernière page, LIMIT et OFFSET
Tri sur une colonne indexée
2,5 ms
119,3 ms
ORDER BY customer par son index, plus le nombre exact de la nouvelle requête
Tri sur une colonne sans index
106,9 ms
1 169,3 ms
ORDER BY amount DESC, un balayage complet
Condition du générateur de filtre
97,5 ms
975,7 ms
WHERE region = 'North' AND qty > 50, nombre et première page (40 000 et 400 000 lignes correspondent)
Regroupement serveur, lignes de groupe dessinées
266,5 ms
3 917,8 ms
GROUP BY region (12 groupes) avec le nombre de lignes de chaque groupe, un balayage complet
Mémoire du processus après l'exécution
76,5 MB
75,7 MB
Working set du processus de benchmark, cache de pages de SQLite compris
La grille elle-même ne lit que les pages à l'écran, son coût propre reste donc constant. Ce qui croît avec la table, c'est le travail de la base de données : le nombre exact, l'OFFSET d'un saut profond, et un tri ou un regroupement sur une colonne sans index. Un index sur la colonne triée ou regroupée, ou le nombre estimé, garde ces étapes courtes. Générer la table de 10 000 000 de lignes a pris 42,5 s, et une seconde exécution sur le même fichier a donné des chiffres à moins de 25% de ceux-ci.
SQL Server, PostgreSQL, Firebird et des tables de 100 000 000 de lignes sont mesurés avec les mêmes outils. Leurs chiffres seront ajoutés ici une fois les mesures faites. D'ici là, aucun chiffre n'est publié pour eux.
À EXÉCUTER SOI-MÊME
Mesurez sur votre machine et votre base de données
Les programmes de benchmark sont dans le dossier QA des sources de sgcUI, QA\Grid\Bench. Ce sont des programmes console sans projet d'IDE.
Compilation
build_bench.bat compile sgcGridBench_Server.exe et sgcGridBench_Live.exe pour Win32 et Win64 avec Delphi 13 dans bin\win32 et bin\win64, et copie le fichier ini à côté.
Mode serveur
sgcGridBench_Server.exe --rows=10000000 crée la table si elle manque, puis mesure chaque étape et écrit un rapport Markdown et une ligne CSV par chiffre. Options : --ini, --rows, --runs, --db, --generate, --out.
Un autre moteur
Modifiez sgcGridBench_Server.ini : DriverName est le pilote FireDAC (MSSQL, PG, FB ou SQLite), chaque clé de [Params] va à la connexion, et Dialect choisit le dialecte SQL. L'ini contient un exemple pour chaque moteur.
Mises à jour en direct et portes QA
sgcGridBench_Live.exe --seconds=5 exécute les cas en direct ci-dessus. Les portes du client sont le groupe perf de la suite QA, sgcGridQA.exe --group=perf, qui ajoute chaque chiffre à sgcGridQA_perf.txt. Lancez-le seul sur une machine au repos.