sgcPivotGrid benchmarks

Gemeten tijden van de sgcPivotGrid-engine, TsgcPivotEngine, op 1.000.000 en 10.000.000 rijen: de gegevens laden, drie pivotindelingen herberekenen in één doorgang en met parallelle berekening, en het geheugen dat de engine bovenop de gegevens gebruikt. Elk cijfer komt uit een benchmarkprogramma in de sgcUI-demo's, zodat je dezelfde test op je eigen hardware kunt draaien.

13,9 ms
1.000.000 rijen herberekenen, Sum, één doorgang
121,1 ms
10.000.000 rijen herberekenen, Sum, één doorgang
46,9 ms
10.000.000 rijen, Sum, parallelle berekening met 4 threads
1.384,0 ms
10.000.000 rijen laden met AppendRow

Win64, Delphi 13, mediaan van 5 runs na 1 opwarmrun, op de hieronder beschreven testmachine. Ga direct naar de Win64-resultaten, de Win32-resultaten, de QA-budgetten of hoe je de test zelf draait.

Wat er wordt gemeten

De rijen worden gegenereerd met een vaste seed, dus elke machine berekent dezelfde pivot. Elke modus controleert of het P1-eindtotaal gelijk is aan de som van de waardekolom.

ScenarioWat het programma doet
LadenAppendRow van 1.000.000 of 10.000.000 rijen met telkens 3 tekstwaarden, 1 getal en 1 datum. De tekst wordt bij binnenkomst omgezet in lidindexen. Een tweede stap vult een getalkolom met 100.000 verschillende waarden via Store.SetFloat.
P1 Sum2 rijvelden (50 regio's bij 20 producten, 1.051 rij-items met de subtotalen en het eindtotaal) en 1 kolomveld (12 maanden), Sum van één waarde. De basispivot.
P3 CountDistinctDe P1-indeling die de verschillende waarden telt van de kolom met 100.000 verschillende waarden, de duurste standaardaggregatie.
P4 StdDev, Average, MaxDrie maten tegelijk op de P1-indeling.
Eén doorgangDe standaardengine, ParallelCalculation uit.
1 tot 14 threadsParallelCalculation := True met MaxThreads ingesteld en ParallelThreshold := 1, zodat ook 1.000.000 rijen parallel draaien. "Alle CPU's" is MaxThreads := 0, één thread per logische CPU, 14 op de testmachine.
Geheugen van de engineHet geheugen dat de engine voor P1 bovenop de geladen gegevens toewijst (QA-poort M1). Het geheugen van de opslag zijn de geladen gegevens zelf.

Testmachine

Een ontwikkelwerkstation met de normale bureaubladbelasting, geen geïsoleerde labmachine. Gemeten op 4 november 2026.

OnderdeelWaarde
CPUIntel Core Ultra 5 245T, een desktopprocessor van 35 W
Kernen6 prestatiekernen en 8 zuinige kernen, 14 logische CPU's
Geheugen31,5 GB
BesturingssysteemWindows 11 Pro 26H2 (build 26300)
CompilerDelphi 13 Florence, releasebuild: optimalisatie aan, bereik- en overflowcontroles uit
PlatformenWin64 (mediaan van 5 runs na 1 opwarmrun) en Win32 (snelle run: 1 gemeten run na 1 opwarmrun)
sgcPivotGrid2026.11.0 Geregistreerd

De processor combineert snelle en zuinige kernen en Windows bepaalt waar elke werkthread draait. Bij 8 threads of meer komt een deel van het werk op de zuinige kernen terecht: P4 bij 1.000.000 rijen op Win64 wisselt dan af tussen runs van ongeveer 13 ms en ongeveer 32 ms, waardoor de mediaan bij 8 threads naar 31,2 ms springt.

Win64

Mediaan van 5 runs na 1 opwarmrun. Tijden in milliseconden.

Laden en geheugen1.000.000 rijen10.000.000 rijen
AppendRow, 3 tekst-, 1 float-, 1 datumkolom132,9 ms1.384,0 ms
Store.SetFloat, 1 floatkolom met 100.000 verschillende waarden8,6 ms98,3 ms
Geheugen van de opslag (6 kolommen)36,0 MB576,0 MB
Geheugen van de engine na P1, elke modus4,8 MB39,1 MB

Herberekening, 1.000.000 rijen

ModusThreadsP1 SumP3 CountDistinctP4 StdDev, Average, Max
Eén doorgang113,9 ms25,6 ms26,3 ms
Parallel, 1 thread112,2 ms21,6 ms26,3 ms
Parallel, 2 threads29,6 ms18,2 ms17,8 ms
Parallel, 4 threads47,1 ms15,9 ms12,9 ms
Parallel, 8 threads86,8 ms15,3 ms31,2 ms
Parallel, alle CPU's146,8 ms16,5 ms31,8 ms

Herberekening, 10.000.000 rijen

ModusThreadsP1 SumP3 CountDistinctP4 StdDev, Average, Max
Eén doorgang1121,1 ms300,2 ms216,9 ms
Parallel, 1 thread1106,4 ms253,0 ms230,6 ms
Parallel, 2 threads267,1 ms212,7 ms130,3 ms
Parallel, 4 threads446,9 ms184,6 ms127,5 ms
Parallel, 8 threads863,6 ms181,1 ms111,9 ms
Parallel, alle CPU's1473,5 ms186,4 ms105,4 ms

Win32

Snelle run: 1 gemeten run na 1 opwarmrun, dus deze cijfers zijn ruisiger dan de Win64-medianen. Het programma is large address aware, wat de opslag van 10.000.000 rijen nodig heeft.

Laden en geheugen1.000.000 rijen10.000.000 rijen
AppendRow, 3 tekst-, 1 float-, 1 datumkolom143,7 ms1.511,9 ms
Store.SetFloat, 1 floatkolom met 100.000 verschillende waarden16,8 ms183,7 ms
Geheugen van de opslag (6 kolommen)36,0 MB576,0 MB
Geheugen van de engine na P1, elke modus4,7 MB39,1 MB

Herberekening, 1.000.000 rijen

ModusThreadsP1 SumP3 CountDistinctP4 StdDev, Average, Max
Eén doorgang116,9 ms27,3 ms50,8 ms
Parallel, 1 thread116,7 ms22,9 ms51,0 ms
Parallel, 2 threads211,3 ms20,4 ms32,8 ms
Parallel, 4 threads48,6 ms16,3 ms23,1 ms
Parallel, 8 threads88,5 ms16,3 ms19,2 ms
Parallel, alle CPU's148,5 ms15,6 ms19,2 ms

Herberekening, 10.000.000 rijen

ModusThreadsP1 SumP3 CountDistinctP4 StdDev, Average, Max
Eén doorgang1143,6 ms286,8 ms442,6 ms
Parallel, 1 thread1139,4 ms253,6 ms463,7 ms
Parallel, 2 threads288,0 ms207,8 ms252,4 ms
Parallel, 4 threads452,5 ms176,8 ms141,7 ms
Parallel, 8 threads857,2 ms167,1 ms159,6 ms
Parallel, alle CPU's1464,4 ms172,0 ms131,9 ms

.NET x64

De .NET-port van het benchmarkprogramma, met dezelfde rijen, indelingen en modi als het Delphi-programma. Het draait op een andere runtime, dus lees deze cijfers als een eigen tabel. Mediaan van 5 runs na 1 opwarmrun. Tijden in milliseconden.

Laden en geheugen1.000.000 rijen10.000.000 rijen
AppendRow, 3 tekst-, 1 float-, 1 datumkolom75,6 ms770,4 ms
Store.SetFloat, 1 floatkolom met 100.000 verschillende waarden2,9 ms43,0 ms
Geheugen van de opslag (6 kolommen)36,0 MB576,0 MB
Geheugen van de engine na P1, elke modus4,7 MB39,1 MB

Runtime: .NET 8.0.31, x64-proces, releasebuild, een net8.0-consoleprogramma met sgcPivotGrid 2026.11.0 Geregistreerd, op de testmachine hierboven en op dezelfde dag. Het geheugen is de levende beheerde heap, gemeten met GC.GetTotalMemory(true) na een volledige garbage collection.

Herberekening, 1.000.000 rijen

ModusThreadsP1 SumP3 CountDistinctP4 StdDev, Average, Max
Eén doorgang111,9 ms23,3 ms14,7 ms
Parallel, 1 thread112,1 ms21,3 ms20,1 ms
Parallel, 2 threads28,5 ms15,5 ms12,6 ms
Parallel, 4 threads46,3 ms14,8 ms9,9 ms
Parallel, 8 threads86,8 ms13,6 ms9,8 ms
Parallel, alle CPU's146,6 ms13,3 ms9,6 ms

Herberekening, 10.000.000 rijen

ModusThreadsP1 SumP3 CountDistinctP4 StdDev, Average, Max
Eén doorgang167,6 ms275,1 ms128,0 ms
Parallel, 1 thread176,4 ms215,0 ms175,9 ms
Parallel, 2 threads244,2 ms159,6 ms89,9 ms
Parallel, 4 threads428,8 ms133,7 ms56,2 ms
Parallel, 8 threads834,0 ms151,7 ms72,6 ms
Parallel, alle CPU's1428,3 ms154,9 ms66,0 ms

De .NET QA-prestatietests gebruiken de Delphi-budgetten maal 1,2 (P1 120 ms op x64). Elke poort bij 1.000.000 rijen bleef in deze run binnen het budget en het P1-eindtotaal was in elke modus gelijk aan de som van de waarden.

De .NET-benchmark draaien

  1. Open PivotGrid\Benchmark\Benchmark.csproj uit de .NET-demo's van sgcUI. De README.md in die map bevat de details.
  2. Bouw en draai het in Release met de .NET 8 SDK of nieuwer. De modi voor parallelle berekening vereisen de geregistreerde editie of de proefversie.
  3. De schakelaars zijn die van het Delphi-programma. Elke run schrijft dotnet-<arch>.md, .json en .csv, bijvoorbeeld dotnet-x64.md.
dotnet run -c Release
dotnet run -c Release -- --rows=1m,10m --quick
dotnet run -c Release -- --rows=500k,2m --threads=4 --out=C:\bench

QA-budgetten bij 1.000.000 rijen

De QA-prestatiegroep controleert deze budgetten bij elke build, op Win64 en op Win32, en de QA-run mislukt als er een wordt overschreden. Voor 10.000.000 rijen bestaat geen budget: de QA rapporteert ze alleen.

PoortWat wordt gemetenWin64-budgetWin64 gemetenWin32-budgetWin32 gemeten
P11.000.000 rijen herberekenen, 2 rijvelden, 1 kolomveld, 1 Sum100 ms13,9 ms160 ms16,9 ms
P1PP1 met ParallelCalculation, één thread per CPU100 ms6,8 ms160 ms8,5 ms
P2AppendRow van 1.000.000 rijen met 3 tekst-, 1 float- en 1 datumwaarde, inclusief codering900 ms132,9 ms1.400 ms143,7 ms
P3De P1-indeling met CountDistinct op een kolom met 100.000 verschillende waarden400 ms25,6 ms600 ms27,3 ms
P4De P1-indeling met StdDev, Average en Max180 ms26,3 ms280 ms50,8 ms
M1Geheugen van de engine boven de opslag voor P132 MB4,8 MB32 MB4,7 MB
M1PM1 met ParallelCalculation, één thread per CPU32 MB4,8 MB32 MB4,7 MB

De budgetten zijn bewust ruim, zodat ze regressies op trage buildmachines opsporen. Op de testmachine liggen de gemeten waarden tussen 5,5 en 22 keer onder de budgetten.

Parallelle berekening

Wat de parallelle rijen in de tabellen toevoegen en hoeveel threads je kunt gebruiken. Geregistreerd

ParallelCalculation := True verdeelt een grote herberekening in vaste blokken van 131.072 rijen, berekent de blokken op werkthreads en voegt ze samen in blokvolgorde. MaxThreads beperkt het aantal werkers (0 is één per CPU, hoogstens 64) en ParallelThreshold, standaard 1.000.000 rijen, houdt kleinere opslagen op de enkele doorgang. Het staat standaard uit, omdat Sum, Average, Product en de StdDev-familie in de laatste bits kunnen afwijken van de enkele doorgang. Het zit in de geregistreerde editie en de proefversie.

  • Gebruik MaxThreads 4 tot 8. Op de testmachine gaf 4 threads de beste P1 bij beide groottes op Win64: 7,1 ms bij 1.000.000 rijen en 46,9 ms bij 10.000.000 rijen, tegenover 13,9 ms en 121,1 ms in een enkele doorgang.
  • Meer threads is niet altijd sneller. 1.000.000 rijen vormen maar 8 blokken, dus de kosten van het starten van threads en het samenvoegen wegen zwaarder dan het bespaarde werk. Bij 10.000.000 rijen kost P1 73,5 ms met 14 threads tegenover 46,9 ms met 4, omdat het geordende samenvoegen serieel verloopt.
  • Zwaardere maten schalen verder. P4 bij 10.000.000 rijen blijft verbeteren tot 14 threads op Win64: 105,4 ms tegenover 216,9 ms in een enkele doorgang.
  • CountDistinct wint het minst. Het tellen van verschillende waarden verloopt serieel, dus P3 is hooguit ongeveer 1,6 keer sneller.

Draai de benchmark zelf

Hetzelfde programma, dezelfde rijen en dezelfde indelingen op je eigen hardware.

  1. Open Demos\PivotGrid\Delphi\Benchmark\sgcPivotGridBenchmark.dpr uit de sgcUI-demo's. De README.txt in die map bevat de details.
  2. Bouw het als releasebuild voor Win64 of Win32, met optimalisatie aan en bereik- en overflowcontroles uit. De modi voor parallelle berekening vereisen de geregistreerde editie of de proefversie.
  3. Start het vanuit een console. De standaardwaarden zijn 1.000.000 en 10.000.000 rijen en de threadaantallen 1, 2, 4, 8 en alle CPU's.
sgcPivotGridBenchmark [--rows=1m,10m] [--threads=1,2,4,8,0] [--out=folder] [--quick]

sgcPivotGridBenchmark
sgcPivotGridBenchmark --rows=1m,10m --quick
sgcPivotGridBenchmark --rows=500k,2m --threads=4 --out=C:\bench
SchakelaarBetekenis
--rowsTe testen aantallen rijen, met de achtervoegsels k en m.
--threadsMaxThreads-waarden voor de parallelle modi. 0 of all is één thread per CPU. De enkele doorgang draait altijd.
--outUitvoermap, standaard een map benchmark naast het exe-bestand.
--quick1 gemeten run na de opwarmrun in plaats van de mediaan van 5.

Elke run schrijft delphi-<platform>.md, .json en .csv met de machine, de instellingen en elke tijdmeting, en controleert de QA-budgetten bij 1.000.000 rijen. BenchmarkMain.pas bevat alle logica, dus je kunt de gegenereerde rijen vervangen door je eigen gegevens en dezelfde tijdmeting en rapporten behouden. Wijken je cijfers sterk af van deze, laat het ons weten.

Lees deze cijfers met zorg

  • Eén machine. De kloktijden veranderen met de CPU (aantal kernen, hybride planning, turbo), de geheugensnelheid en de overige belasting van de machine.
  • De vorm van de gegevens doet ertoe: meer leden, meer verschillende waarden of meer maten kosten meer tijd en geheugen dan de hier gemeten indelingen.
  • De Win32-cijfers komen uit een snelle run met 1 gemeten run. De Win64-cijfers zijn medianen van 5.
  • Deze pagina vergelijkt sgcPivotGrid niet met andere pivotcomponenten. Ze publiceert alleen cijfers van sgcPivotGrid, met een methode die iedereen kan herhalen.

De QA-budgetten staan ook in het helponderwerp Architecture.

De beste deal: All-AccessElk eSeGeCe-product, inclusief Premium-ondersteuning, vanaf €1,059 per jaar.
Bekijk de All-Access-prijzen

Bouw met sgcPivotGrid

Download de sgcUI-proefversie en voeg sgcPivotGrid toe aan je Delphi-, C++ Builder- of .NET-toepassing.