sgcGrid Benchmarks

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.

Les chiffres clés

MesureWin32Win64
Image de 1920 x 1080 d'une grille de 100 000 lignes, 12 colonnes (porte QA C1)1,47 ms1,29 ms
La même image avec des cellules clignotantes et 3 règles de format1,67 ms1,46 ms
Mises à jour en direct depuis un thread de travail dans une grille triée de 1 000 lignes, images rendues à 60 Hz1 000 mises à jour/s à 60,0 ips, 0 image manquée1 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 ips1 552 858 mises à jour/s2 001 921 mises à jour/s
Mode serveur, table SQLite de 10 000 000 de lignes : ouverture jusqu'à la première page dessinéenon 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.

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.

La machine de test

CPUIntel Core Ultra 5 245T, 14 cœurs, 14 processeurs logiques
Mémoire31,5 GB
DisqueSSD NVMe, Phison 1 TB
Système d'exploitationWindows 11 Pro 26H2, build 26300.9711
CompilateurDelphi 13 (compilateur 37.0), builds release Win32 et Win64
Base de donnéesSQLite 3.42.0 via FireDAC, intégré et lié statiquement
Sourcesarbre 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.

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).

PorteCe qui est mesuréWin32Win64Budget
C1Image plate 1920 x 1080, 12 colonnes, 100 000 lignes1,47 ms1,29 ms4,09 / 4,32 ms
StyléeLa même image, cellules clignotantes et 3 règles de format (moyenne de 60 images)1,67 ms1,46 ms25 / 16 ms
GW3Image avec surlignage de recherche, 100 000 lignes1,43 ms1,75 ms25 / 16 ms
GW5Image avec 20 colonnes, 3 niveaux de bandes, 2 colonnes figées, 100 000 lignes1,62 ms1,42 ms25 / 16 ms
GW7Image avec colonnes d'image, de progression et de sparkline de 30 points, 100 000 lignes2,20 ms3,20 ms25 / 16 ms
F1Image avec 2 colonnes figées et un pied de page, défilée dans les deux sens, 100 000 lignes0,56 ms0,50 ms25 / 16 ms
G4Image de 1 000 000 de lignes regroupées sur 2 colonnes, tout développé0,49 ms0,48 ms25 / 16 ms
D1Image avec 3 bandes de détail visibles de 50 lignes chacune2,47 ms2,65 ms25 / 16 ms
G1Regrouper 100 000 lignes sur 2 colonnes, 2 synthèses, construire et aplatir15,11 ms11,98 ms60 / 40 ms
G2Regrouper 1 000 000 de lignes sur 2 colonnes, 2 synthèses, construire et aplatir155,37 ms132,61 ms700 / 450 ms
G3Développer ou réduire un groupe de la vue de 1 000 000 de lignes4,16 ms3,28 ms25 / 15 ms
G5Synthèses de pied de page, 5 colonnes de 100 000 lignes5,64 ms2,34 ms25 / 15 ms
T1Arbre de 100 000 lignes, profondeur jusqu'à 8, construire et aplatir entièrement développé20,42 ms22,80 ms90 / 60 ms
GW0Reconstruction de la vue triée, 1 000 000 de lignes253,45 ms240,29 ms268,24 / 259,62 ms
GW1Valeurs distinctes d'une colonne de texte de 1 000 membres, avec un filtre en cascade, 1 000 000 de lignes55,61 ms48,42 ms450 / 300 ms
GW2Filtre avec une liste de 500 valeurs sur 1 000 plus une condition, 1 000 000 de lignes50,75 ms48,02 ms225 / 150 ms
M1Mémoire de la vue en lignes au-dessus des données, 1 000 000 de lignes regroupées sur 2 colonnes20,07 MB20,09 MB32 MB
X1Export XLSX de 100 000 lignes x 12 colonnes, 2 niveaux de groupe, synthèses1 693,87 ms1 002,71 ms4 500 / 3 000 ms
L2Visionneuse de journal qui suit la fin pendant qu'un thread ajoute 10 000 lignes par seconde : images dessinées par seconde38,87 ips38,67 ips20 ips minimum
L2La même exécution : 99e centile du délai de saisie4,22 ms2,83 ms33 ms

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.

LignesCadence viséePlateformeMises à jour/sImages/sCréneaux manquésRendu, médianeRendu, p99Rendu, max
1 0001 000/sWin321 00060,001,28 ms2,46 ms2,57 ms
1 0001 000/sWin641 00060,001,36 ms2,41 ms2,45 ms
1 00010 000/sWin329 99860,001,43 ms2,79 ms2,98 ms
1 00010 000/sWin649 99860,001,29 ms2,46 ms3,17 ms
1 000le plus vite possibleWin321 552 85860,001,26 ms3,09 ms3,35 ms
1 000le plus vite possibleWin642 001 92160,001,26 ms2,54 ms3,28 ms
100 0001 000/sWin321 00060,0010,52 ms13,72 ms15,92 ms
100 0001 000/sWin641 00060,0010,50 ms13,99 ms14,68 ms
100 00010 000/sWin329 96647,66214,70 ms40,33 ms42,03 ms
100 00010 000/sWin649 99754,22913,59 ms35,10 ms39,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.

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.

Étape1 000 000 de lignes10 000 000 de lignesCe qui s'exécute sur la base de données
Ouverture jusqu'à la première page dessinée2,8 ms117,3 msColonnes du schéma, COUNT(*) exact, première page
Ouverture avec le nombre estimé2,1 ms2,1 msCountMode = gscEstimated : première page seulement, le nombre croît tant que les pages reviennent pleines
Nombre exact de lignes0,2 ms115,6 msSELECT COUNT(*)
Saut au milieu40,1 ms378,8 msUne page à la ligne médiane, LIMIT et OFFSET
Saut à la fin75,0 ms735,4 msLa dernière page, LIMIT et OFFSET
Tri sur une colonne indexée2,5 ms119,3 msORDER BY customer par son index, plus le nombre exact de la nouvelle requête
Tri sur une colonne sans index106,9 ms1 169,3 msORDER BY amount DESC, un balayage complet
Condition du générateur de filtre97,5 ms975,7 msWHERE region = 'North' AND qty > 50, nombre et première page (40 000 et 400 000 lignes correspondent)
Regroupement serveur, lignes de groupe dessinées266,5 ms3 917,8 msGROUP BY region (12 groupes) avec le nombre de lignes de chaque groupe, un balayage complet
Mémoire du processus après l'exécution76,5 MB75,7 MBWorking 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.

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.

[Connection]
DriverName=PG

[Params]
Server=localhost
Port=5432
Database=bench
User_Name=postgres
Password=secret

[Bench]
Dialect=postgresql
Table=bench_orders
Rows=10000000
Runs=5
Meilleur rapport qualité-prix : All-AccessTous les produits eSeGeCe, Support Premium inclus, à partir de €1,059/an.
Voir les tarifs All-Access

Essayez sgcGrid sur vos données

Téléchargez l'essai de sgcUI, ouvrez les démos ServerModeAndCards et LiveTicker, puis pointez le benchmark vers votre propre base de données.