sgcGrid Benchmarks

Todo número desta página foi medido em uma única máquina com os gates de desempenho de QA do sgcGrid e dois programas de benchmark que acompanham a suíte de QA. Nada é estimado ou extrapolado. Execute os mesmos programas no seu próprio hardware e no seu próprio banco de dados para obter os seus números.

Os números principais

MediçãoWin32Win64
Quadro de 1920 x 1080 de um grid com 100.000 linhas, 12 colunas (gate de QA C1)1,47 ms1,29 ms
O mesmo quadro com células piscando e 3 regras de formato1,67 ms1,46 ms
Atualizações ao vivo de uma thread de trabalho em um grid ordenado de 1.000 linhas, quadros renderizados a 60 Hz1.000 atualizações/s a 60,0 fps, 0 quadros perdidos1.000 atualizações/s a 60,0 fps, 0 quadros perdidos
Maior taxa de atualização de uma thread de trabalho enquanto o mesmo grid mantém 60 fps1.552.858 atualizações/s2.001.921 atualizações/s
Modo servidor, tabela SQLite de 10.000.000 de linhas: abertura até a primeira página desenhadanão executado117,3 ms (2,1 ms com a contagem estimada)

Medido em 2026-11-04. As tabelas abaixo mostram o método, a máquina e cada valor.

Como os números são medidos

Quadros

Um quadro é a janela visível de um grid de 1920 x 1080, renderizada sem janela pelo TsgcGridRenderer no canvas raster, o mesmo código que desenha os grids VCL e FireMonkey. Não há janela nem GPU no processo. O grid rola um pouco a cada quadro, como faz um grid ao vivo. C1 e os demais gates de quadro usam a mediana de 5 execuções de 60 quadros após um aquecimento.

Operações do modelo

Agrupamento, filtro, ordenação e resumos rodam no modelo de dados do grid, sem renderizador. Cada valor é a mediana de 5 execuções após um aquecimento, ou a melhor de 12 execuções intercaladas quando o gate indica. Todo gate tem um orçamento, e a execução de QA falha quando um valor o ultrapassa.

Atualizações ao vivo

Uma thread de trabalho grava atualizações de preço com o UpdateRow, seguro entre threads, como faz a demo LiveTicker. A thread principal renderiza um quadro a cada 16,67 ms (60 Hz). Cada quadro reordena a visão alterada, como faz um grid desenhado. O benchmark informa as atualizações gravadas por segundo, os quadros renderizados por segundo, os quadros que perderam o seu intervalo e o tempo de renderização por quadro.

Modo servidor

O TsgcGridServerProvider_DataSet pagina uma tabela gerada por meio do FireDAC. Cada etapa termina quando suas linhas estão carregadas e o quadro está desenhado. Cada valor é a mediana de 5 execuções após um aquecimento, com o arquivo do banco de dados no cache do sistema operacional. Os saltos caem 2.000 linhas distantes de uma execução para outra, de modo que cada execução lê do banco de dados e não do cache de páginas do grid.

A máquina de teste

CPUIntel Core Ultra 5 245T, 14 núcleos, 14 processadores lógicos
Memória31,5 GB
DiscoSSD NVMe, Phison de 1 TB
Sistema operacionalWindows 11 Pro 26H2, build 26300.9711
CompiladorDelphi 13 (compilador 37.0), builds release de Win32 e Win64
Banco de dadosSQLite 3.42.0 por meio do FireDAC, embutido e vinculado estaticamente
Código-fonteárvore de desenvolvimento do sgcGrid de 2026-11-04 (revisão svn 20169 com alterações locais)

A máquina era uma estação de trabalho de desenvolvimento, não um servidor de benchmark isolado. Cada execução pesada manteve um bloqueio em toda a máquina, de modo que nenhum build ou teste rodou ao mesmo tempo.

Gates de desempenho de QA

O grupo perf da suíte de QA do sgcGrid, executado sozinho em Win32 e Win64. O orçamento é o limite que o gate impõe (Win32 / Win64).

GateO que é medidoWin32Win64Orçamento
C1Quadro simples de 1920 x 1080, 12 colunas, 100.000 linhas1,47 ms1,29 ms4,09 / 4,32 ms
Com estiloO mesmo quadro, células piscando e 3 regras de formato (média de 60 quadros)1,67 ms1,46 ms25 / 16 ms
GW3Quadro com realces de localização, 100.000 linhas1,43 ms1,75 ms25 / 16 ms
GW5Quadro com 20 colunas, 3 níveis de faixa, 2 colunas congeladas, 100.000 linhas1,62 ms1,42 ms25 / 16 ms
GW7Quadro com colunas de imagem, progresso e sparkline de 30 pontos, 100.000 linhas2,20 ms3,20 ms25 / 16 ms
F1Quadro com 2 colunas congeladas e um rodapé, rolado nos dois sentidos, 100.000 linhas0,56 ms0,50 ms25 / 16 ms
G4Quadro de 1.000.000 de linhas agrupadas por 2 colunas, tudo expandido0,49 ms0,48 ms25 / 16 ms
D1Quadro com 3 faixas de detalhe visíveis de 50 linhas cada2,47 ms2,65 ms25 / 16 ms
G1Agrupar 100.000 linhas por 2 colunas, 2 resumos, construir e achatar15,11 ms11,98 ms60 / 40 ms
G2Agrupar 1.000.000 de linhas por 2 colunas, 2 resumos, construir e achatar155,37 ms132,61 ms700 / 450 ms
G3Expandir ou recolher um grupo da visão de 1.000.000 de linhas4,16 ms3,28 ms25 / 15 ms
G5Resumos de rodapé, 5 colunas de 100.000 linhas5,64 ms2,34 ms25 / 15 ms
T1Árvore de 100.000 linhas, profundidade até 8, construir e achatar totalmente expandida20,42 ms22,80 ms90 / 60 ms
GW0Reconstrução da visão ordenada, 1.000.000 de linhas253,45 ms240,29 ms268,24 / 259,62 ms
GW1Valores distintos de uma coluna de texto de 1.000 membros, com filtro em cascata, 1.000.000 de linhas55,61 ms48,42 ms450 / 300 ms
GW2Filtro com uma lista de 500 de 1.000 valores mais uma condição, 1.000.000 de linhas50,75 ms48,02 ms225 / 150 ms
M1Memória da visão de linhas acima dos dados, 1.000.000 de linhas agrupadas por 2 colunas20,07 MB20,09 MB32 MB
X1Exportação XLSX de 100.000 linhas x 12 colunas, 2 níveis de grupo, resumos1.693,87 ms1.002,71 ms4.500 / 3.000 ms
L2Visualizador de log acompanhando o final enquanto uma thread acrescenta 10.000 linhas por segundo: quadros desenhados por segundo38,87 fps38,67 fpsmínimo de 20 fps
L2A mesma execução: percentil 99 do atraso de entrada4,22 ms2,83 ms33 ms

Atualizações ao vivo a 60 fps

sgcGridBench_Live: uma thread de trabalho grava preço, variação, volume e hora de uma linha aleatória com UpdateRow, enquanto a thread principal renderiza a cada 16,67 ms um grid ordenado e piscante de 1920 x 1080. 5 segundos por caso. Um intervalo perdido é um quadro que terminou depois do início do seguinte.

LinhasTaxa alvoPlataformaAtualizações/sQuadros/sIntervalos perdidosRenderização, medianaRenderização, p99Renderização, máx.
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.000o mais rápido possívelWin321.552.85860,001,26 ms3,09 ms3,35 ms
1.000o mais rápido possívelWin642.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

Um grid ordenado de 100.000 linhas reordena a sua visão em todo quadro em que a coluna ordenada mudou, então o tempo de renderização cresce com o número de linhas. Atualizações de colunas não ordenadas mantêm a visão, e MaxFPS pode reduzir a taxa de quadros de um grid que só precisa parecer ao vivo.

Tabelas de banco de dados de 1.000.000 e 10.000.000 de linhas

sgcGridBench_Server em SQLite 3.42.0, Win64. A tabela tem 12 colunas de tipos variados (inteiro, texto, ponto flutuante, data e hora, booleano), uma chave inteira indexada e uma coluna de cliente indexada, com dados determinísticos. Cada etapa termina com as linhas carregadas e o quadro de 1920 x 1080 desenhado. Mediana de 5 execuções após um aquecimento.

Etapa1.000.000 de linhas10.000.000 de linhasO que roda no banco de dados
Abertura até a primeira página desenhada2,8 ms117,3 msColunas do esquema, COUNT(*) exato, primeira página
Abertura com a contagem estimada2,1 ms2,1 msCountMode = gscEstimated: só a primeira página, a contagem cresce enquanto as páginas voltam cheias
Contagem exata de linhas0,2 ms115,6 msSELECT COUNT(*)
Salto para o meio40,1 ms378,8 msUma página na linha do meio, LIMIT e OFFSET
Salto para o fim75,0 ms735,4 msA última página, LIMIT e OFFSET
Ordenação por uma coluna indexada2,5 ms119,3 msORDER BY customer pelo seu índice, mais a contagem exata da nova consulta
Ordenação por uma coluna sem índice106,9 ms1.169,3 msORDER BY amount DESC, uma varredura completa
Condição do construtor de filtros97,5 ms975,7 msWHERE region = 'North' AND qty > 50, contagem e primeira página (correspondem 40.000 e 400.000 linhas)
Agrupamento no servidor, linhas de grupo desenhadas266,5 ms3.917,8 msGROUP BY region (12 grupos) com a contagem de linhas de cada grupo, uma varredura completa
Memória do processo após a execução76,5 MB75,7 MBConjunto de trabalho do processo de benchmark, cache de páginas do SQLite incluído

O grid em si lê apenas as páginas na tela, então o seu custo próprio permanece constante. O que cresce com a tabela é o trabalho do banco de dados: a contagem exata, o OFFSET de um salto profundo e uma ordenação ou agrupamento em uma coluna sem índice. Um índice na coluna ordenada ou agrupada, ou a contagem estimada, mantém essas etapas curtas. Gerar a tabela de 10.000.000 de linhas levou 42,5 s, e uma segunda execução no mesmo arquivo deu valores dentro de 25% destes.

SQL Server, PostgreSQL, Firebird e tabelas de 100.000.000 de linhas são medidos com as mesmas ferramentas. Os seus valores serão adicionados aqui quando forem executados. Até lá, nenhum número é publicado para eles.

Meça na sua máquina e no seu banco de dados

Os programas de benchmark estão na pasta QA do código-fonte do sgcUI, QA\Grid\Bench. São programas de console sem projeto de IDE.

Compilar

build_bench.bat compila sgcGridBench_Server.exe e sgcGridBench_Live.exe para Win32 e Win64 com o Delphi 13 em bin\win32 e bin\win64, e copia o arquivo ini ao lado deles.

Modo servidor

sgcGridBench_Server.exe --rows=10000000 cria a tabela quando ela não existe, depois mede cada etapa e grava um relatório Markdown e uma linha CSV por valor. Opções: --ini, --rows, --runs, --db, --generate, --out.

Outro mecanismo

Edite sgcGridBench_Server.ini: DriverName é o driver do FireDAC (MSSQL, PG, FB ou SQLite), cada chave de [Params] vai para a conexão, e Dialect seleciona o dialeto SQL. O ini traz um exemplo para cada mecanismo.

Atualizações ao vivo e gates de QA

sgcGridBench_Live.exe --seconds=5 executa os casos ao vivo acima. Os gates do cliente são o grupo perf da suíte de QA, sgcGridQA.exe --group=perf, que acrescenta cada valor a sgcGridQA_perf.txt. Execute-o sozinho em uma máquina ociosa.

[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
Melhor custo-benefício: All-AccessTodos os produtos da eSeGeCe, com Suporte Premium incluído, a partir de €1,059/ano.
Ver preços do All-Access

Experimente o sgcGrid com os seus dados

Baixe a versão de teste do sgcUI, abra as demos ServerModeAndCards e LiveTicker e depois aponte o benchmark para o seu próprio banco de dados.