sgcGrid Benchmarks

Jede Zahl auf dieser Seite wurde auf einem einzigen Rechner mit den QA-Leistungsgates von sgcGrid und zwei Benchmark-Programmen gemessen, die zur QA-Suite gehören. Nichts ist geschätzt oder hochgerechnet. Führe dieselben Programme auf deiner eigenen Hardware und mit deiner eigenen Datenbank aus, um deine Zahlen zu erhalten.

Die wichtigsten Zahlen

MessungWin32Win64
1920 x 1080 Frame eines Grids mit 100.000 Zeilen, 12 Spalten (QA-Gate C1)1,47 ms1,29 ms
Derselbe Frame mit aufblinkenden Zellen und 3 Formatregeln1,67 ms1,46 ms
Live-Updates aus einem Worker-Thread in ein sortiertes Grid mit 1.000 Zeilen, Frames mit 60 Hz gerendert1.000 Updates/s bei 60,0 fps, 0 verpasste Frames1.000 Updates/s bei 60,0 fps, 0 verpasste Frames
Höchste Updaterate eines Worker-Threads, während dasselbe Grid 60 fps hält1.552.858 Updates/s2.001.921 Updates/s
Servermodus, SQLite-Tabelle mit 10.000.000 Zeilen: Öffnen bis zur ersten gezeichneten Seitenicht gemessen117,3 ms (2,1 ms mit geschätzter Anzahl)

Gemessen am 2026-11-04. Die folgenden Tabellen nennen die Methode, den Rechner und jede Zahl.

Wie die Zahlen gemessen werden

Frames

Ein Frame ist das sichtbare Fenster eines Grids mit 1920 x 1080, ohne Fenster von TsgcGridRenderer auf die Raster-Canvas gerendert, mit demselben Code, der die VCL- und FireMonkey-Grids zeichnet. Es gibt weder ein Fenster noch eine GPU im Spiel. Das Grid scrollt in jedem Frame ein wenig, wie es ein Live-Grid tut. C1 und die anderen Frame-Gates nehmen den Median aus 5 Läufen mit je 60 Frames nach einem Warm-up.

Modelloperationen

Gruppieren, Filtern, Sortieren und Zusammenfassungen laufen ohne Renderer auf dem Datenmodell des Grids. Jede Zahl ist der Median aus 5 Läufen nach einem Warm-up, oder der beste von 12 abwechselnden Läufen, wo das Gate es angibt. Jedes Gate hat ein Budget, und der QA-Lauf schlägt fehl, wenn eine Zahl es überschreitet.

Live-Updates

Ein Worker-Thread schreibt Kursupdates mit dem threadsicheren UpdateRow, wie es die LiveTicker-Demo tut. Der Hauptthread rendert alle 16,67 ms (60 Hz) einen Frame. Jeder Frame sortiert die geänderte Ansicht neu, wie es ein gezeichnetes Grid tut. Der Benchmark meldet die geschriebenen Updates pro Sekunde, die gerenderten Frames pro Sekunde, die Frames, die ihren Zeitslot verpasst haben, und die Renderzeit pro Frame.

Servermodus

TsgcGridServerProvider_DataSet liest eine erzeugte Tabelle seitenweise über FireDAC. Jeder Schritt endet, wenn seine Zeilen geladen sind und der Frame gezeichnet ist. Jede Zahl ist der Median aus 5 Läufen nach einem Warm-up, mit der Datenbankdatei im Cache des Betriebssystems. Die Sprünge landen von Lauf zu Lauf 2.000 Zeilen auseinander, sodass jeder Lauf aus der Datenbank liest und nicht aus dem Seitencache des Grids.

Der Testrechner

CPUIntel Core Ultra 5 245T, 14 Kerne, 14 logische Prozessoren
Arbeitsspeicher31,5 GB
DatenträgerNVMe-SSD, Phison 1 TB
BetriebssystemWindows 11 Pro 26H2, Build 26300.9711
CompilerDelphi 13 (Compiler 37.0), Release-Builds für Win32 und Win64
DatenbankSQLite 3.42.0 über FireDAC, eingebettet und statisch gelinkt
QuellcodesgcGrid-Entwicklungsstand vom 2026-11-04 (svn-Revision 20169 mit lokalen Änderungen)

Der Rechner war eine Entwickler-Workstation, kein isolierter Benchmark-Server. Jeder aufwendige Lauf hielt eine rechnerweite Sperre, sodass kein Build und kein Test gleichzeitig lief.

QA-Leistungsgates

Die Gruppe perf der sgcGrid-QA-Suite, allein unter Win32 und Win64 ausgeführt. Das Budget ist die Grenze, die das Gate durchsetzt (Win32 / Win64).

GateWas gemessen wirdWin32Win64Budget
C1Flacher Frame 1920 x 1080, 12 Spalten, 100.000 Zeilen1,47 ms1,29 ms4,09 / 4,32 ms
Mit StilDerselbe Frame, aufblinkende Zellen und 3 Formatregeln (Mittel aus 60 Frames)1,67 ms1,46 ms25 / 16 ms
GW3Frame mit Suchtreffer-Hervorhebung, 100.000 Zeilen1,43 ms1,75 ms25 / 16 ms
GW5Frame mit 20 Spalten, 3 Bandebenen, 2 fixierten Spalten, 100.000 Zeilen1,62 ms1,42 ms25 / 16 ms
GW7Frame mit Bild-, Fortschritts- und 30-Punkte-Sparkline-Spalten, 100.000 Zeilen2,20 ms3,20 ms25 / 16 ms
F1Frame mit 2 fixierten Spalten und einer Fußzeile, in beide Richtungen gescrollt, 100.000 Zeilen0,56 ms0,50 ms25 / 16 ms
G4Frame mit 1.000.000 Zeilen, nach 2 Spalten gruppiert, alles aufgeklappt0,49 ms0,48 ms25 / 16 ms
D1Frame mit 3 sichtbaren Detailbändern zu je 50 Zeilen2,47 ms2,65 ms25 / 16 ms
G1100.000 Zeilen nach 2 Spalten gruppieren, 2 Zusammenfassungen, aufbauen und flachlegen15,11 ms11,98 ms60 / 40 ms
G21.000.000 Zeilen nach 2 Spalten gruppieren, 2 Zusammenfassungen, aufbauen und flachlegen155,37 ms132,61 ms700 / 450 ms
G3Eine Gruppe der Ansicht mit 1.000.000 Zeilen auf- oder zuklappen4,16 ms3,28 ms25 / 15 ms
G5Fußzeilen-Zusammenfassungen, 5 Spalten mit 100.000 Zeilen5,64 ms2,34 ms25 / 15 ms
T1Baum mit 100.000 Zeilen, bis zu 8 Ebenen tief, aufbauen und vollständig aufgeklappt flachlegen20,42 ms22,80 ms90 / 60 ms
GW0Neuaufbau der sortierten Ansicht, 1.000.000 Zeilen253,45 ms240,29 ms268,24 / 259,62 ms
GW1Eindeutige Werte einer Textspalte mit 1.000 Werten, mit kaskadierendem Filter, 1.000.000 Zeilen55,61 ms48,42 ms450 / 300 ms
GW2Filter mit einer Wertliste von 500 aus 1.000 Werten plus einer Bedingung, 1.000.000 Zeilen50,75 ms48,02 ms225 / 150 ms
M1Speicher der Zeilenansicht über den Daten, 1.000.000 Zeilen nach 2 Spalten gruppiert20,07 MB20,09 MB32 MB
X1XLSX-Export von 100.000 Zeilen x 12 Spalten, 2 Gruppenebenen, Zusammenfassungen1.693,87 ms1.002,71 ms4.500 / 3.000 ms
L2Log-Viewer, der das Ende verfolgt, während ein Thread 10.000 Zeilen pro Sekunde anhängt: gezeichnete Frames pro Sekunde38,87 fps38,67 fpsmindestens 20 fps
L2Derselbe Lauf: 99. Perzentil der Eingabeverzögerung4,22 ms2,83 ms33 ms

Live-Updates mit 60 fps

sgcGridBench_Live: Ein Worker-Thread schreibt mit UpdateRow Kurs, Änderung, Volumen und Zeit einer zufälligen Zeile, während der Hauptthread alle 16,67 ms ein sortiertes, aufblinkendes Grid mit 1920 x 1080 rendert. 5 Sekunden pro Fall. Ein verpasster Slot ist ein Frame, der nach dem Beginn des nächsten fertig wurde.

ZeilenZielratePlattformUpdates/sFrames/sVerpasste SlotsRender, MedianRender, 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.000so schnell wie möglichWin321.552.85860,001,26 ms3,09 ms3,35 ms
1.000so schnell wie möglichWin642.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

Ein sortiertes Grid mit 100.000 Zeilen sortiert seine Ansicht in jedem Frame neu, in dem sich die sortierte Spalte geändert hat, daher wächst seine Renderzeit mit der Zeilenzahl. Updates nicht sortierter Spalten erhalten die Ansicht, und MaxFPS kann die Framerate eines Grids senken, das nur live aussehen muss.

Datenbanktabellen mit 1.000.000 und 10.000.000 Zeilen

sgcGridBench_Server auf SQLite 3.42.0, Win64. Die Tabelle hat 12 Spalten gemischter Typen (Integer, Text, Gleitkomma, Datum und Zeit, Boolean), einen indizierten Integer-Schlüssel und eine indizierte Kundenspalte, mit deterministischen Daten. Jeder Schritt endet mit geladenen Zeilen und gezeichnetem Frame von 1920 x 1080. Median aus 5 Läufen nach einem Warm-up.

Schritt1.000.000 Zeilen10.000.000 ZeilenWas in der Datenbank läuft
Öffnen bis zur ersten gezeichneten Seite2,8 ms117,3 msSpalten aus dem Schema, exaktes COUNT(*), erste Seite
Öffnen mit geschätzter Anzahl2,1 ms2,1 msCountMode = gscEstimated: nur die erste Seite, die Anzahl wächst, solange Seiten voll zurückkommen
Exakte Zeilenanzahl0,2 ms115,6 msSELECT COUNT(*)
Sprung in die Mitte40,1 ms378,8 msEine Seite an der mittleren Zeile, LIMIT und OFFSET
Sprung ans Ende75,0 ms735,4 msDie letzte Seite, LIMIT und OFFSET
Sortieren nach einer indizierten Spalte2,5 ms119,3 msORDER BY customer über den Index, plus die exakte Anzahl der neuen Abfrage
Sortieren nach einer Spalte ohne Index106,9 ms1.169,3 msORDER BY amount DESC, ein vollständiger Scan
Bedingung des Filter-Builders97,5 ms975,7 msWHERE region = 'North' AND qty > 50, Anzahl und erste Seite (40.000 und 400.000 Zeilen treffen zu)
Servergruppierung, gezeichnete Gruppenzeilen266,5 ms3.917,8 msGROUP BY region (12 Gruppen) mit der Zeilenanzahl jeder Gruppe, ein vollständiger Scan
Prozessspeicher nach dem Lauf76,5 MB75,7 MBWorking Set des Benchmark-Prozesses, einschließlich des SQLite-Seitencaches

Das Grid selbst liest nur die Seiten auf dem Bildschirm, daher bleibt sein eigener Aufwand konstant. Mit der Tabelle wächst die Arbeit der Datenbank: die exakte Anzahl, das OFFSET eines tiefen Sprungs und eine Sortierung oder Gruppierung nach einer Spalte ohne Index. Ein Index auf der sortierten oder gruppierten Spalte oder die geschätzte Anzahl hält diese Schritte kurz. Das Erzeugen der Tabelle mit 10.000.000 Zeilen dauerte 42,5 s, und ein zweiter Lauf auf derselben Datei ergab Werte innerhalb von 25% dieser Zahlen.

SQL Server, PostgreSQL, Firebird und Tabellen mit 100.000.000 Zeilen werden mit denselben Werkzeugen gemessen. Ihre Zahlen werden hier ergänzt, sobald sie gemessen wurden. Bis dahin wird für sie keine Zahl veröffentlicht.

Auf deinem Rechner und mit deiner Datenbank messen

Die Benchmark-Programme liegen im QA-Ordner des sgcUI-Quellcodes, QA\Grid\Bench. Es sind Konsolenprogramme ohne IDE-Projekt.

Bauen

build_bench.bat baut sgcGridBench_Server.exe und sgcGridBench_Live.exe für Win32 und Win64 mit Delphi 13 nach bin\win32 und bin\win64 und kopiert die ini-Datei daneben.

Servermodus

sgcGridBench_Server.exe --rows=10000000 legt die Tabelle an, wenn sie fehlt, misst dann jeden Schritt und schreibt einen Markdown-Bericht und eine CSV-Zeile pro Zahl. Optionen: --ini, --rows, --runs, --db, --generate, --out.

Andere Engine

Bearbeite sgcGridBench_Server.ini: DriverName ist der FireDAC-Treiber (MSSQL, PG, FB oder SQLite), jeder Schlüssel von [Params] geht an die Verbindung, und Dialect wählt den SQL-Dialekt. Die ini enthält ein Beispiel für jede Engine.

Live-Updates und QA-Gates

sgcGridBench_Live.exe --seconds=5 führt die obigen Live-Fälle aus. Die Client-Gates sind die Gruppe perf der QA-Suite, sgcGridQA.exe --group=perf, die jede Zahl an sgcGridQA_perf.txt anhängt. Führe sie allein auf einem Rechner im Leerlauf aus.

[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
Bestes Preis-Leistungs-Verhältnis: All-AccessAlle eSeGeCe-Produkte, inklusive Premium-Support, ab €1,059 pro Jahr.
All-Access-Preise ansehen

Probiere sgcGrid mit deinen Daten aus

Lade die sgcUI-Testversion herunter, öffne die Demos ServerModeAndCards und LiveTicker und richte den Benchmark dann auf deine eigene Datenbank.