sgcGrid Benchmarks

Elk getal op deze pagina is gemeten op één machine met de QA-prestatiegates van sgcGrid en twee benchmarkprogramma's die met de QA-suite worden meegeleverd. Niets is geschat of geëxtrapoleerd. Voer dezelfde programma's uit op je eigen hardware en database om je eigen cijfers te krijgen.

De belangrijkste cijfers

MetingWin32Win64
Frame van 1920 x 1080 van een grid met 100.000 rijen, 12 kolommen (QA-gate C1)1,47 ms1,29 ms
Hetzelfde frame met oplichtende cellen en 3 opmaakregels1,67 ms1,46 ms
Live updates vanuit een workerthread naar een gesorteerd grid van 1.000 rijen, frames gerenderd op 60 Hz1.000 updates/s op 60,0 fps, 0 gemiste frames1.000 updates/s op 60,0 fps, 0 gemiste frames
Hoogste updatesnelheid van één workerthread terwijl hetzelfde grid 60 fps haalt1.552.858 updates/s2.001.921 updates/s
Servermodus, SQLite-tabel van 10.000.000 rijen: openen tot de eerste getekende paginaniet uitgevoerd117,3 ms (2,1 ms met het geschatte aantal)

Gemeten op 2026-11-04. De tabellen hieronder geven de methode, de machine en elk cijfer.

Hoe de cijfers worden gemeten

Frames

Een frame is het zichtbare venster van een grid van 1920 x 1080, zonder venster gerenderd door TsgcGridRenderer op het rastercanvas, dezelfde code die de VCL- en FireMonkey-grids tekent. Er is geen venster en geen GPU in het spel. Het grid scrolt bij elk frame een beetje, zoals een live grid doet. C1 en de andere framegates nemen de mediaan van 5 runs van 60 frames na een warming-up.

Modelbewerkingen

Groeperen, filteren, sorteren en samenvattingen draaien op het gegevensmodel van het grid, zonder renderer. Elk cijfer is de mediaan van 5 runs na een warming-up, of de beste van 12 afwisselende runs waar de gate dat aangeeft. Elke gate heeft een budget, en de QA-run mislukt als een cijfer het overschrijdt.

Live updates

Een workerthread schrijft koersupdates met het threadveilige UpdateRow, zoals de LiveTicker-demo doet. De hoofdthread rendert elke 16,67 ms (60 Hz) een frame. Elk frame sorteert de gewijzigde weergave opnieuw, zoals een getekend grid doet. De benchmark rapporteert de geschreven updates per seconde, de gerenderde frames per seconde, de frames die hun slot misten en de rendertijd per frame.

Servermodus

TsgcGridServerProvider_DataSet pagineert een gegenereerde tabel via FireDAC. Elke stap eindigt als de rijen zijn geladen en het frame is getekend. Elk cijfer is de mediaan van 5 runs na een warming-up, met het databasebestand in de cache van het besturingssysteem. Sprongen komen van run tot run 2.000 rijen uit elkaar terecht, zodat elke run uit de database leest en niet uit de paginacache van het grid.

De testmachine

CPUIntel Core Ultra 5 245T, 14 kernen, 14 logische processors
Geheugen31,5 GB
SchijfNVMe SSD, Phison 1 TB
BesturingssysteemWindows 11 Pro 26H2, build 26300.9711
CompilerDelphi 13 (compiler 37.0), releasebuilds voor Win32 en Win64
DatabaseSQLite 3.42.0 via FireDAC, ingebed en statisch gelinkt
Broncodeontwikkelboom van sgcGrid van 2026-11-04 (svn-revisie 20169 met lokale wijzigingen)

De machine was een ontwikkelwerkstation, geen geïsoleerde benchmarkserver. Elke zware run hield een machinebrede vergrendeling vast, zodat er geen build of test tegelijk draaide.

QA-prestatiegates

De groep perf van de sgcGrid QA-suite, alleen uitgevoerd op Win32 en Win64. Het budget is de limiet die de gate afdwingt (Win32 / Win64).

GateWat wordt gemetenWin32Win64Budget
C1Vlak frame 1920 x 1080, 12 kolommen, 100.000 rijen1,47 ms1,29 ms4,09 / 4,32 ms
Met stijlHetzelfde frame, oplichtende cellen en 3 opmaakregels (gemiddelde van 60 frames)1,67 ms1,46 ms25 / 16 ms
GW3Frame met zoekmarkeringen, 100.000 rijen1,43 ms1,75 ms25 / 16 ms
GW5Frame met 20 kolommen, 3 bandniveaus, 2 vaste kolommen, 100.000 rijen1,62 ms1,42 ms25 / 16 ms
GW7Frame met afbeeldings-, voortgangs- en sparklinekolommen van 30 punten, 100.000 rijen2,20 ms3,20 ms25 / 16 ms
F1Frame met 2 vaste kolommen en een voettekst, in beide richtingen gescrold, 100.000 rijen0,56 ms0,50 ms25 / 16 ms
G4Frame van 1.000.000 rijen gegroepeerd op 2 kolommen, alles uitgeklapt0,49 ms0,48 ms25 / 16 ms
D1Frame met 3 zichtbare detailbanden van elk 50 rijen2,47 ms2,65 ms25 / 16 ms
G1100.000 rijen groeperen op 2 kolommen, 2 samenvattingen, opbouwen en afvlakken15,11 ms11,98 ms60 / 40 ms
G21.000.000 rijen groeperen op 2 kolommen, 2 samenvattingen, opbouwen en afvlakken155,37 ms132,61 ms700 / 450 ms
G3Eén groep van de weergave met 1.000.000 rijen uit- of inklappen4,16 ms3,28 ms25 / 15 ms
G5Voettekstsamenvattingen, 5 kolommen van 100.000 rijen5,64 ms2,34 ms25 / 15 ms
T1Boom van 100.000 rijen, diepte tot 8, opbouwen en volledig uitgeklapt afvlakken20,42 ms22,80 ms90 / 60 ms
GW0Herbouw van de gesorteerde weergave, 1.000.000 rijen253,45 ms240,29 ms268,24 / 259,62 ms
GW1Unieke waarden van een tekstkolom met 1.000 leden, met een trapsgewijs filter, 1.000.000 rijen55,61 ms48,42 ms450 / 300 ms
GW2Filter met een waardelijst van 500 uit 1.000 plus een voorwaarde, 1.000.000 rijen50,75 ms48,02 ms225 / 150 ms
M1Geheugen van de regelweergave boven de gegevens, 1.000.000 rijen gegroepeerd op 2 kolommen20,07 MB20,09 MB32 MB
X1XLSX-export van 100.000 rijen x 12 kolommen, 2 groepsniveaus, samenvattingen1.693,87 ms1.002,71 ms4.500 / 3.000 ms
L2Logviewer die het einde volgt terwijl een thread 10.000 regels per seconde toevoegt: getekende frames per seconde38,87 fps38,67 fpsminimaal 20 fps
L2Dezelfde run: 99e percentiel van de invoervertraging4,22 ms2,83 ms33 ms

Live updates op 60 fps

sgcGridBench_Live: een workerthread schrijft koers, wijziging, volume en tijd van een willekeurige rij met UpdateRow, terwijl de hoofdthread elke 16,67 ms een gesorteerd, oplichtend grid van 1920 x 1080 rendert. 5 seconden per geval. Een gemist slot is een frame dat klaar was na het begin van het volgende.

RijenDoelsnelheidPlatformUpdates/sFrames/sGemiste slotsRender, mediaanRender, p99Render, 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.000zo snel mogelijkWin321.552.85860,001,26 ms3,09 ms3,35 ms
1.000zo snel mogelijkWin642.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

Een gesorteerd grid van 100.000 rijen sorteert zijn weergave opnieuw in elk frame waarin de gesorteerde kolom is gewijzigd, dus de rendertijd groeit met het aantal rijen. Updates van niet gesorteerde kolommen behouden de weergave, en MaxFPS kan de framesnelheid verlagen van een grid dat er alleen live uit hoeft te zien.

Databasetabellen van 1.000.000 en 10.000.000 rijen

sgcGridBench_Server op SQLite 3.42.0, Win64. De tabel heeft 12 kolommen van gemengde typen (geheel getal, tekst, floating point, datum en tijd, boolean), een geïndexeerde integersleutel en een geïndexeerde klantkolom, met deterministische gegevens. Elke stap eindigt met geladen rijen en het getekende frame van 1920 x 1080. Mediaan van 5 runs na een warming-up.

Stap1.000.000 rijen10.000.000 rijenWat er in de database draait
Openen tot de eerste getekende pagina2,8 ms117,3 msKolommen uit het schema, exacte COUNT(*), eerste pagina
Openen met het geschatte aantal2,1 ms2,1 msCountMode = gscEstimated: alleen de eerste pagina, het aantal groeit zolang pagina's vol terugkomen
Exact aantal rijen0,2 ms115,6 msSELECT COUNT(*)
Sprong naar het midden40,1 ms378,8 msEén pagina bij de middelste rij, LIMIT en OFFSET
Sprong naar het einde75,0 ms735,4 msDe laatste pagina, LIMIT en OFFSET
Sorteren op een geïndexeerde kolom2,5 ms119,3 msORDER BY customer via de index, plus het exacte aantal van de nieuwe query
Sorteren op een kolom zonder index106,9 ms1.169,3 msORDER BY amount DESC, een volledige scan
Voorwaarde van de filterbouwer97,5 ms975,7 msWHERE region = 'North' AND qty > 50, aantal en eerste pagina (40.000 en 400.000 rijen komen overeen)
Servergroepering, getekende groepsrijen266,5 ms3.917,8 msGROUP BY region (12 groepen) met het aantal rijen van elke groep, een volledige scan
Procesgeheugen na de run76,5 MB75,7 MBWorking set van het benchmarkproces, inclusief de paginacache van SQLite

Het grid zelf leest alleen de pagina's in beeld, dus de eigen kosten blijven gelijk. Wat met de tabel meegroeit is het werk van de database: het exacte aantal, de OFFSET van een diepe sprong, en een sortering of groepering op een kolom zonder index. Een index op de gesorteerde of gegroepeerde kolom, of het geschatte aantal, houdt die stappen kort. Het genereren van de tabel met 10.000.000 rijen duurde 42,5 s, en een tweede run op hetzelfde bestand gaf cijfers binnen 25% van deze.

SQL Server, PostgreSQL, Firebird en tabellen van 100.000.000 rijen worden met dezelfde tools gemeten. Hun cijfers worden hier toegevoegd zodra ze zijn gemeten. Tot die tijd wordt er voor hen geen getal gepubliceerd.

Meet op je eigen machine en database

De benchmarkprogramma's staan in de QA-map van de sgcUI-broncode, QA\Grid\Bench. Het zijn consoleprogramma's zonder IDE-project.

Bouwen

build_bench.bat bouwt sgcGridBench_Server.exe en sgcGridBench_Live.exe voor Win32 en Win64 met Delphi 13 naar bin\win32 en bin\win64, en kopieert het ini-bestand ernaast.

Servermodus

sgcGridBench_Server.exe --rows=10000000 maakt de tabel aan als die ontbreekt, meet dan elke stap en schrijft een Markdown-rapport en een CSV-regel per cijfer. Opties: --ini, --rows, --runs, --db, --generate, --out.

Een andere engine

Bewerk sgcGridBench_Server.ini: DriverName is het FireDAC-stuurprogramma (MSSQL, PG, FB of SQLite), elke sleutel van [Params] gaat naar de verbinding, en Dialect kiest het SQL-dialect. De ini bevat een voorbeeld voor elke engine.

Live updates en QA-gates

sgcGridBench_Live.exe --seconds=5 voert de live gevallen hierboven uit. De clientgates zijn de groep perf van de QA-suite, sgcGridQA.exe --group=perf, die elk cijfer toevoegt aan sgcGridQA_perf.txt. Voer die alleen uit op een rustige machine.

[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
De beste deal: All-AccessElk eSeGeCe-product, inclusief Premium-ondersteuning, vanaf €1,059 per jaar.
Bekijk de All-Access-prijzen

Probeer sgcGrid met je eigen gegevens

Download de sgcUI-proefversie, open de demo's ServerModeAndCards en LiveTicker en richt de benchmark dan op je eigen database.