sgcGrid Benchmark

Ogni numero di questa pagina è stato misurato su un'unica macchina con i gate di prestazioni QA di sgcGrid e due programmi di benchmark inclusi nella suite QA. Nulla è stimato o estrapolato. Esegui gli stessi programmi sul tuo hardware e sul tuo database per ottenere i tuoi numeri.

I numeri principali

MisuraWin32Win64
Frame 1920 x 1080 di una griglia con 100.000 righe, 12 colonne (gate QA C1)1,47 ms1,29 ms
Lo stesso frame con celle lampeggianti e 3 regole di formato1,67 ms1,46 ms
Aggiornamenti live da un thread di lavoro in una griglia ordinata di 1.000 righe, frame renderizzati a 60 Hz1.000 aggiornamenti/s a 60,0 fps, 0 frame persi1.000 aggiornamenti/s a 60,0 fps, 0 frame persi
Massima frequenza di aggiornamento di un thread di lavoro mentre la stessa griglia mantiene 60 fps1.552.858 aggiornamenti/s2.001.921 aggiornamenti/s
Modalità server, tabella SQLite da 10.000.000 di righe: apertura fino alla prima pagina disegnatanon eseguito117,3 ms (2,1 ms con il conteggio stimato)

Misurato il 2026-11-04. Le tabelle seguenti riportano il metodo, la macchina e ogni valore.

Come vengono misurati i numeri

Frame

Un frame è la finestra visibile di una griglia 1920 x 1080, renderizzata senza finestra da TsgcGridRenderer sul canvas raster, lo stesso codice che disegna le griglie VCL e FireMonkey. Nel ciclo non ci sono né finestre né GPU. La griglia scorre un poco a ogni frame, come fa una griglia live. C1 e gli altri gate di frame usano la mediana di 5 esecuzioni da 60 frame dopo un riscaldamento.

Operazioni sul modello

Raggruppamento, filtro, ordinamento e riepiloghi vengono eseguiti sul modello dati della griglia, senza renderer. Ogni valore è la mediana di 5 esecuzioni dopo un riscaldamento, oppure il migliore di 12 esecuzioni alternate dove il gate lo indica. Ogni gate ha un budget, e l'esecuzione QA fallisce quando un valore lo supera.

Aggiornamenti live

Un thread di lavoro scrive aggiornamenti di prezzo con il thread safe UpdateRow, come fa la demo LiveTicker. Il thread principale renderizza un frame ogni 16,67 ms (60 Hz). Ogni frame riordina la vista modificata, come fa una griglia disegnata. Il benchmark riporta gli aggiornamenti al secondo scritti, i frame al secondo renderizzati, i frame che hanno mancato il loro slot e il tempo di rendering per frame.

Modalità server

TsgcGridServerProvider_DataSet pagina una tabella generata tramite FireDAC. Ogni passo termina quando le sue righe sono caricate e il frame è disegnato. Ogni valore è la mediana di 5 esecuzioni dopo un riscaldamento, con il file del database nella cache del sistema operativo. I salti cadono a 2.000 righe di distanza da un'esecuzione all'altra, così ogni esecuzione legge dal database e non dalla cache di pagine della griglia.

La macchina di prova

CPUIntel Core Ultra 5 245T, 14 core, 14 processori logici
Memoria31,5 GB
DiscoSSD NVMe, Phison 1 TB
Sistema operativoWindows 11 Pro 26H2, build 26300.9711
CompilatoreDelphi 13 (compilatore 37.0), build release Win32 e Win64
DatabaseSQLite 3.42.0 tramite FireDAC, incorporato e collegato staticamente
Sorgentialbero di sviluppo di sgcGrid del 2026-11-04 (revisione svn 20169 con modifiche locali)

La macchina era una workstation di sviluppo, non un server di benchmark isolato. Ogni esecuzione pesante ha tenuto un blocco a livello di macchina, quindi nessuna build o test è stato eseguito nello stesso momento.

Gate di prestazioni QA

Il gruppo perf della suite QA di sgcGrid, eseguito da solo su Win32 e Win64. Il budget è il limite che il gate impone (Win32 / Win64).

GateCosa si misuraWin32Win64Budget
C1Frame piatto 1920 x 1080, 12 colonne, 100.000 righe1,47 ms1,29 ms4,09 / 4,32 ms
Con stileLo stesso frame, celle lampeggianti e 3 regole di formato (media di 60 frame)1,67 ms1,46 ms25 / 16 ms
GW3Frame con evidenziazioni della ricerca, 100.000 righe1,43 ms1,75 ms25 / 16 ms
GW5Frame con 20 colonne, 3 livelli di banda, 2 colonne bloccate, 100.000 righe1,62 ms1,42 ms25 / 16 ms
GW7Frame con colonne di immagine, avanzamento e sparkline a 30 punti, 100.000 righe2,20 ms3,20 ms25 / 16 ms
F1Frame con 2 colonne bloccate e un piè di pagina, scorso in entrambe le direzioni, 100.000 righe0,56 ms0,50 ms25 / 16 ms
G4Frame di 1.000.000 di righe raggruppate per 2 colonne, tutto espanso0,49 ms0,48 ms25 / 16 ms
D1Frame con 3 bande di dettaglio visibili da 50 righe ciascuna2,47 ms2,65 ms25 / 16 ms
G1Raggruppare 100.000 righe per 2 colonne, 2 riepiloghi, costruire e appiattire15,11 ms11,98 ms60 / 40 ms
G2Raggruppare 1.000.000 di righe per 2 colonne, 2 riepiloghi, costruire e appiattire155,37 ms132,61 ms700 / 450 ms
G3Espandere o comprimere un gruppo della vista da 1.000.000 di righe4,16 ms3,28 ms25 / 15 ms
G5Riepiloghi a piè di pagina, 5 colonne da 100.000 righe5,64 ms2,34 ms25 / 15 ms
T1Albero di 100.000 righe, profondità fino a 8, costruire e appiattire completamente espanso20,42 ms22,80 ms90 / 60 ms
GW0Ricostruzione della vista ordinata, 1.000.000 di righe253,45 ms240,29 ms268,24 / 259,62 ms
GW1Valori distinti di una colonna di testo con 1.000 membri, con filtro a cascata, 1.000.000 di righe55,61 ms48,42 ms450 / 300 ms
GW2Filtro con un elenco di 500 valori su 1.000 più una condizione, 1.000.000 di righe50,75 ms48,02 ms225 / 150 ms
M1Memoria della vista a righe sopra i dati, 1.000.000 di righe raggruppate per 2 colonne20,07 MB20,09 MB32 MB
X1Esportazione XLSX di 100.000 righe x 12 colonne, 2 livelli di gruppo, riepiloghi1.693,87 ms1.002,71 ms4.500 / 3.000 ms
L2Visualizzatore di log che segue la coda mentre un thread aggiunge 10.000 righe al secondo: frame disegnati al secondo38,87 fps38,67 fpsminimo 20 fps
L2La stessa esecuzione: 99° percentile del ritardo di input4,22 ms2,83 ms33 ms

Aggiornamenti live a 60 fps

sgcGridBench_Live: un thread di lavoro scrive prezzo, variazione, volume e ora di una riga casuale con UpdateRow, mentre il thread principale renderizza ogni 16,67 ms una griglia ordinata e lampeggiante 1920 x 1080. 5 secondi per caso. Uno slot perso è un frame terminato dopo l'inizio del successivo.

RigheFrequenza obiettivoPiattaformaAggiornamenti/sFrame/sSlot persiRendering, medianaRendering, p99Rendering, 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.000il più veloce possibileWin321.552.85860,001,26 ms3,09 ms3,35 ms
1.000il più veloce possibileWin642.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

Una griglia ordinata di 100.000 righe riordina la sua vista a ogni frame in cui la colonna ordinata è cambiata, quindi il suo tempo di rendering cresce con il numero di righe. Gli aggiornamenti di colonne non ordinate mantengono la vista, e MaxFPS può abbassare la frequenza di frame di una griglia che deve solo sembrare live.

Tabelle di database da 1.000.000 e 10.000.000 di righe

sgcGridBench_Server su SQLite 3.42.0, Win64. La tabella ha 12 colonne di tipi misti (intero, testo, virgola mobile, data e ora, booleano), una chiave intera indicizzata e una colonna cliente indicizzata, con dati deterministici. Ogni passo termina con le righe caricate e il frame 1920 x 1080 disegnato. Mediana di 5 esecuzioni dopo un riscaldamento.

Passo1.000.000 di righe10.000.000 di righeCosa viene eseguito sul database
Apertura fino alla prima pagina disegnata2,8 ms117,3 msColonne dallo schema, COUNT(*) esatto, prima pagina
Apertura con il conteggio stimato2,1 ms2,1 msCountMode = gscEstimated: solo la prima pagina, il conteggio cresce finché le pagine tornano piene
Conteggio esatto delle righe0,2 ms115,6 msSELECT COUNT(*)
Salto al centro40,1 ms378,8 msUna pagina alla riga centrale, LIMIT e OFFSET
Salto alla fine75,0 ms735,4 msL'ultima pagina, LIMIT e OFFSET
Ordinamento per una colonna indicizzata2,5 ms119,3 msORDER BY customer tramite il suo indice, più il conteggio esatto della nuova query
Ordinamento per una colonna senza indice106,9 ms1.169,3 msORDER BY amount DESC, una scansione completa
Condizione del generatore di filtri97,5 ms975,7 msWHERE region = 'North' AND qty > 50, conteggio e prima pagina (corrispondono 40.000 e 400.000 righe)
Raggruppamento lato server, righe di gruppo disegnate266,5 ms3.917,8 msGROUP BY region (12 gruppi) con il conteggio delle righe di ogni gruppo, una scansione completa
Memoria del processo dopo l'esecuzione76,5 MB75,7 MBWorking set del processo di benchmark, cache di pagine di SQLite inclusa

La griglia stessa legge solo le pagine sullo schermo, quindi il suo costo resta costante. Ciò che cresce con la tabella è il lavoro del database: il conteggio esatto, l'OFFSET di un salto profondo e un ordinamento o un raggruppamento su una colonna senza indice. Un indice sulla colonna ordinata o raggruppata, oppure il conteggio stimato, mantiene brevi quei passi. Generare la tabella da 10.000.000 di righe ha richiesto 42,5 s, e una seconda esecuzione sullo stesso file ha dato valori entro il 25% di questi.

SQL Server, PostgreSQL, Firebird e tabelle da 100.000.000 di righe sono misurati con gli stessi strumenti. I loro valori saranno aggiunti qui quando saranno stati eseguiti. Fino ad allora, per essi non viene pubblicato alcun numero.

Misura sulla tua macchina e sul tuo database

I programmi di benchmark si trovano nella cartella QA dei sorgenti di sgcUI, QA\Grid\Bench. Sono programmi console senza progetto IDE.

Compilazione

build_bench.bat compila sgcGridBench_Server.exe e sgcGridBench_Live.exe per Win32 e Win64 con Delphi 13 in bin\win32 e bin\win64, e copia il file ini accanto ad essi.

Modalità server

sgcGridBench_Server.exe --rows=10000000 crea la tabella se manca, poi misura ogni passo e scrive un report Markdown e una riga CSV per valore. Opzioni: --ini, --rows, --runs, --db, --generate, --out.

Un altro motore

Modifica sgcGridBench_Server.ini: DriverName è il driver FireDAC (MSSQL, PG, FB o SQLite), ogni chiave di [Params] va alla connessione, e Dialect seleziona il dialetto SQL. L'ini contiene un esempio per ogni motore.

Aggiornamenti live e gate QA

sgcGridBench_Live.exe --seconds=5 esegue i casi live sopra. I gate del client sono il gruppo perf della suite QA, sgcGridQA.exe --group=perf, che aggiunge ogni valore a sgcGridQA_perf.txt. Eseguilo da solo su una macchina a riposo.

[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
La scelta più conveniente: All-AccessTutti i prodotti eSeGeCe, con Supporto Premium incluso, a partire da €1,059/anno.
Vedi i prezzi All-Access

Prova sgcGrid sui tuoi dati

Scarica la versione di prova di sgcUI, apri le demo ServerModeAndCards e LiveTicker, poi punta il benchmark al tuo database.