sgcGrid Testy wydajności

Każda liczba na tej stronie została zmierzona na jednej maszynie za pomocą bramek wydajności QA sgcGrid i dwóch programów testowych dostarczanych z zestawem QA. Nic nie jest szacowane ani ekstrapolowane. Uruchom te same programy na własnym sprzęcie i własnej bazie danych, aby uzyskać własne liczby.

Najważniejsze wyniki

PomiarWin32Win64
Klatka 1920 x 1080 siatki ze 100 000 wierszy, 12 kolumn (bramka QA C1)1,47 ms1,29 ms
Ta sama klatka z błyskającymi komórkami i 3 regułami formatowania1,67 ms1,46 ms
Aktualizacje na żywo z wątku roboczego do posortowanej siatki z 1000 wierszami, klatki renderowane przy 60 Hz1000 aktualizacji/s przy 60,0 fps, 0 utraconych klatek1000 aktualizacji/s przy 60,0 fps, 0 utraconych klatek
Najwyższa częstotliwość aktualizacji jednego wątku roboczego, gdy ta sama siatka utrzymuje 60 fps1 552 858 aktualizacji/s2 001 921 aktualizacji/s
Tryb serwera, tabela SQLite z 10 000 000 wierszy: otwarcie do pierwszej narysowanej stronynie uruchamiano117,3 ms (2,1 ms z szacowaną liczbą)

Zmierzono 2026-11-04. Poniższe tabele podają metodę, maszynę i każdą liczbę.

Jak mierzone są liczby

Klatki

Klatka to widoczne okno siatki 1920 x 1080, renderowane bez okna przez TsgcGridRenderer na płótno rastrowe, tym samym kodem, który rysuje siatki VCL i FireMonkey. W pętli nie ma okna ani GPU. Siatka przewija się trochę w każdej klatce, tak jak siatka na żywo. C1 i pozostałe bramki klatek biorą medianę z 5 przebiegów po 60 klatek po rozgrzewce.

Operacje na modelu

Grupowanie, filtrowanie, sortowanie i podsumowania działają na modelu danych siatki, bez renderera. Każda liczba to mediana z 5 przebiegów po rozgrzewce albo najlepszy z 12 przeplatanych przebiegów, gdy tak określa bramka. Każda bramka ma budżet, a przebieg QA kończy się niepowodzeniem, gdy liczba go przekroczy.

Aktualizacje na żywo

Wątek roboczy zapisuje aktualizacje cen bezpiecznym wątkowo UpdateRow, tak jak robi to demo LiveTicker. Wątek główny renderuje klatkę co 16,67 ms (60 Hz). Każda klatka ponownie sortuje zmieniony widok, tak jak robi to rysowana siatka. Test podaje zapisane aktualizacje na sekundę, wyrenderowane klatki na sekundę, klatki, które nie zmieściły się w swoim slocie, i czas renderowania na klatkę.

Tryb serwera

TsgcGridServerProvider_DataSet stronicuje wygenerowaną tabelę przez FireDAC. Każdy krok kończy się, gdy jego wiersze są wczytane, a klatka narysowana. Każda liczba to mediana z 5 przebiegów po rozgrzewce, z plikiem bazy danych w pamięci podręcznej systemu operacyjnego. Skoki lądują 2000 wierszy od siebie w kolejnych przebiegach, więc każdy przebieg czyta z bazy danych, a nie z pamięci podręcznej stron siatki.

Maszyna testowa

CPUIntel Core Ultra 5 245T, 14 rdzeni, 14 procesorów logicznych
Pamięć31,5 GB
DyskNVMe SSD, Phison 1 TB
System operacyjnyWindows 11 Pro 26H2, kompilacja 26300.9711
KompilatorDelphi 13 (kompilator 37.0), wersje release Win32 i Win64
Baza danychSQLite 3.42.0 przez FireDAC, wbudowany i statycznie dołączony
Kod źródłowydrzewo rozwojowe sgcGrid z 2026-11-04 (rewizja svn 20169 z lokalnymi zmianami)

Maszyna była stacją roboczą dewelopera, a nie izolowanym serwerem testowym. Każdy ciężki przebieg trzymał blokadę na poziomie całej maszyny, więc żadna kompilacja ani test nie działały w tym samym czasie.

Bramki wydajności QA

Grupa perf zestawu QA sgcGrid, uruchamiana osobno w Win32 i Win64. Budżet to limit egzekwowany przez bramkę (Win32 / Win64).

BramkaCo jest mierzoneWin32Win64Budżet
C1Płaska klatka 1920 x 1080, 12 kolumn, 100 000 wierszy1,47 ms1,29 ms4,09 / 4,32 ms
Ze stylemTa sama klatka, błyskające komórki i 3 reguły formatowania (średnia z 60 klatek)1,67 ms1,46 ms25 / 16 ms
GW3Klatka z podświetleniem wyników wyszukiwania, 100 000 wierszy1,43 ms1,75 ms25 / 16 ms
GW5Klatka z 20 kolumnami, 3 poziomami pasm, 2 zablokowanymi kolumnami, 100 000 wierszy1,62 ms1,42 ms25 / 16 ms
GW7Klatka z kolumnami obrazu, postępu i wykresu sparkline z 30 punktów, 100 000 wierszy2,20 ms3,20 ms25 / 16 ms
F1Klatka z 2 zablokowanymi kolumnami i stopką, przewijana w obu kierunkach, 100 000 wierszy0,56 ms0,50 ms25 / 16 ms
G4Klatka z 1 000 000 wierszy pogrupowanych według 2 kolumn, wszystko rozwinięte0,49 ms0,48 ms25 / 16 ms
D1Klatka z 3 widocznymi pasmami szczegółów po 50 wierszy każde2,47 ms2,65 ms25 / 16 ms
G1Grupowanie 100 000 wierszy według 2 kolumn, 2 podsumowania, budowa i spłaszczenie15,11 ms11,98 ms60 / 40 ms
G2Grupowanie 1 000 000 wierszy według 2 kolumn, 2 podsumowania, budowa i spłaszczenie155,37 ms132,61 ms700 / 450 ms
G3Rozwinięcie lub zwinięcie jednej grupy widoku z 1 000 000 wierszy4,16 ms3,28 ms25 / 15 ms
G5Podsumowania stopki, 5 kolumn po 100 000 wierszy5,64 ms2,34 ms25 / 15 ms
T1Drzewo ze 100 000 wierszy, głębokość do 8, budowa i spłaszczenie w pełni rozwinięte20,42 ms22,80 ms90 / 60 ms
GW0Odbudowa posortowanego widoku, 1 000 000 wierszy253,45 ms240,29 ms268,24 / 259,62 ms
GW1Unikalne wartości kolumny tekstowej o 1000 elementach, z filtrem kaskadowym, 1 000 000 wierszy55,61 ms48,42 ms450 / 300 ms
GW2Filtr z listą 500 z 1000 wartości oraz warunkiem, 1 000 000 wierszy50,75 ms48,02 ms225 / 150 ms
M1Pamięć widoku linii nad danymi, 1 000 000 wierszy pogrupowanych według 2 kolumn20,07 MB20,09 MB32 MB
X1Eksport XLSX 100 000 wierszy x 12 kolumn, 2 poziomy grup, podsumowania1693,87 ms1002,71 ms4500 / 3000 ms
L2Przeglądarka logów śledząca koniec, gdy wątek dopisuje 10 000 linii na sekundę: narysowane klatki na sekundę38,87 fps38,67 fpsminimum 20 fps
L2Ten sam przebieg: 99. percentyl opóźnienia wejścia4,22 ms2,83 ms33 ms

Aktualizacje na żywo przy 60 fps

sgcGridBench_Live: wątek roboczy zapisuje cenę, zmianę, wolumen i czas losowego wiersza za pomocą UpdateRow, a wątek główny co 16,67 ms renderuje posortowaną, błyskającą siatkę 1920 x 1080. 5 sekund na przypadek. Utracony slot to klatka, która zakończyła się po rozpoczęciu następnej.

WierszeCzęstotliwość docelowaPlatformaAktualizacje/sKlatki/sUtracone slotyRender, medianaRender, p99Render, maks.
10001000/sWin32100060,001,28 ms2,46 ms2,57 ms
10001000/sWin64100060,001,36 ms2,41 ms2,45 ms
100010 000/sWin32999860,001,43 ms2,79 ms2,98 ms
100010 000/sWin64999860,001,29 ms2,46 ms3,17 ms
1000tak szybko, jak to możliweWin321 552 85860,001,26 ms3,09 ms3,35 ms
1000tak szybko, jak to możliweWin642 001 92160,001,26 ms2,54 ms3,28 ms
100 0001000/sWin32100060,0010,52 ms13,72 ms15,92 ms
100 0001000/sWin64100060,0010,50 ms13,99 ms14,68 ms
100 00010 000/sWin32996647,66214,70 ms40,33 ms42,03 ms
100 00010 000/sWin64999754,22913,59 ms35,10 ms39,86 ms

Posortowana siatka ze 100 000 wierszy ponownie sortuje swój widok w każdej klatce, w której zmieniła się posortowana kolumna, więc czas renderowania rośnie wraz z liczbą wierszy. Aktualizacje kolumn, które nie są posortowane, zachowują widok, a MaxFPS może obniżyć liczbę klatek siatki, która ma tylko wyglądać na żywą.

Tabele bazy danych z 1 000 000 i 10 000 000 wierszy

sgcGridBench_Server na SQLite 3.42.0, Win64. Tabela ma 12 kolumn różnych typów (liczba całkowita, tekst, liczba zmiennoprzecinkowa, data i czas, wartość logiczna), indeksowany klucz całkowity i indeksowaną kolumnę klienta, z danymi deterministycznymi. Każdy krok kończy się wczytanymi wierszami i narysowaną klatką 1920 x 1080. Mediana z 5 przebiegów po rozgrzewce.

Krok1 000 000 wierszy10 000 000 wierszyCo działa w bazie danych
Otwarcie do pierwszej narysowanej strony2,8 ms117,3 msKolumny ze schematu, dokładne COUNT(*), pierwsza strona
Otwarcie z szacowaną liczbą2,1 ms2,1 msCountMode = gscEstimated: tylko pierwsza strona, liczba rośnie, dopóki strony wracają pełne
Dokładna liczba wierszy0,2 ms115,6 msSELECT COUNT(*)
Skok na środek40,1 ms378,8 msJedna strona przy środkowym wierszu, LIMIT i OFFSET
Skok na koniec75,0 ms735,4 msOstatnia strona, LIMIT i OFFSET
Sortowanie według kolumny z indeksem2,5 ms119,3 msORDER BY customer przez jej indeks, plus dokładna liczba nowego zapytania
Sortowanie według kolumny bez indeksu106,9 ms1169,3 msORDER BY amount DESC, pełne skanowanie
Warunek konstruktora filtrów97,5 ms975,7 msWHERE region = 'North' AND qty > 50, liczba i pierwsza strona (pasuje 40 000 i 400 000 wierszy)
Grupowanie na serwerze, narysowane wiersze grup266,5 ms3917,8 msGROUP BY region (12 grup) z liczbą wierszy każdej grupy, pełne skanowanie
Pamięć procesu po przebiegu76,5 MB75,7 MBZestaw roboczy procesu testowego, razem z pamięcią podręczną stron SQLite

Sama siatka czyta tylko strony widoczne na ekranie, więc jej własny koszt pozostaje stały. Z tabelą rośnie praca bazy danych: dokładna liczba, OFFSET głębokiego skoku oraz sortowanie lub grupowanie według kolumny bez indeksu. Indeks na posortowanej lub pogrupowanej kolumnie albo szacowana liczba skraca te kroki. Wygenerowanie tabeli z 10 000 000 wierszy trwało 42,5 s, a drugi przebieg na tym samym pliku dał wyniki w granicach 25% tych liczb.

SQL Server, PostgreSQL, Firebird i tabele ze 100 000 000 wierszy są mierzone tymi samymi narzędziami. Ich wyniki zostaną tu dodane po wykonaniu pomiarów. Do tego czasu nie publikujemy dla nich żadnej liczby.

Zmierz na własnej maszynie i własnej bazie danych

Programy testowe znajdują się w folderze QA źródeł sgcUI, QA\Grid\Bench. To programy konsolowe bez projektu IDE.

Kompilacja

build_bench.bat kompiluje sgcGridBench_Server.exe i sgcGridBench_Live.exe dla Win32 i Win64 w Delphi 13 do bin\win32 i bin\win64 oraz kopiuje obok plik ini.

Tryb serwera

sgcGridBench_Server.exe --rows=10000000 tworzy tabelę, jeśli jej brakuje, następnie mierzy każdy krok i zapisuje raport Markdown oraz linię CSV dla każdej liczby. Opcje: --ini, --rows, --runs, --db, --generate, --out.

Inny silnik

Edytuj sgcGridBench_Server.ini: DriverName to sterownik FireDAC (MSSQL, PG, FB lub SQLite), każdy klucz z [Params] trafia do połączenia, a Dialect wybiera dialekt SQL. Plik ini zawiera przykład dla każdego silnika.

Aktualizacje na żywo i bramki QA

sgcGridBench_Live.exe --seconds=5 uruchamia powyższe przypadki na żywo. Bramki klienta to grupa perf zestawu QA, sgcGridQA.exe --group=perf, która dopisuje każdą liczbę do sgcGridQA_perf.txt. Uruchamiaj ją samodzielnie na bezczynnej maszynie.

[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
Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Wypróbuj sgcGrid na swoich danych

Pobierz wersję próbną sgcUI, otwórz dema ServerModeAndCards i LiveTicker, a potem skieruj test na własną bazę danych.