sgcGrid Benchmarks

Cada número de esta página se midió en una sola máquina con las puertas de rendimiento de QA de sgcGrid y dos programas de benchmark que se incluyen en la suite de QA. Nada es estimado ni extrapolado. Ejecuta los mismos programas en tu propio hardware y tu propia base de datos para obtener tus números.

Las cifras principales

MediciónWin32Win64
Fotograma de 1920 x 1080 de una cuadrícula de 100.000 filas, 12 columnas (puerta de QA C1)1,47 ms1,29 ms
El mismo fotograma con celdas parpadeantes y 3 reglas de formato1,67 ms1,46 ms
Actualizaciones en vivo desde un hilo de trabajo en una cuadrícula ordenada de 1.000 filas, fotogramas a 60 Hz1.000 actualizaciones/s a 60,0 fps, 0 fotogramas perdidos1.000 actualizaciones/s a 60,0 fps, 0 fotogramas perdidos
Mayor ritmo de actualización de un hilo de trabajo mientras la misma cuadrícula mantiene 60 fps1.552.858 actualizaciones/s2.001.921 actualizaciones/s
Modo servidor, tabla SQLite de 10.000.000 de filas: apertura hasta la primera página pintadano ejecutado117,3 ms (2,1 ms con el recuento estimado)

Medido el 2026-11-04. Las tablas siguientes muestran el método, la máquina y cada cifra.

Cómo se miden los números

Fotogramas

Un fotograma es la ventana visible de una cuadrícula de 1920 x 1080, dibujada sin ventana por TsgcGridRenderer sobre el lienzo de trama, el mismo código que pinta las cuadrículas VCL y FireMonkey. No hay ventana ni GPU en el proceso. La cuadrícula se desplaza un poco en cada fotograma, como hace una cuadrícula en vivo. C1 y las demás puertas de fotograma toman la mediana de 5 ejecuciones de 60 fotogramas tras un calentamiento.

Operaciones del modelo

La agrupación, el filtrado, la ordenación y los resúmenes se ejecutan sobre el modelo de datos de la cuadrícula, sin renderizador. Cada cifra es la mediana de 5 ejecuciones tras un calentamiento, o la mejor de 12 ejecuciones intercaladas cuando la puerta lo indica. Cada puerta tiene un presupuesto, y la ejecución de QA falla cuando una cifra lo supera.

Actualizaciones en vivo

Un hilo de trabajo escribe actualizaciones de precio con UpdateRow, seguro entre hilos, como hace la demo LiveTicker. El hilo principal dibuja un fotograma cada 16,67 ms (60 Hz). Cada fotograma vuelve a ordenar la vista modificada, como hace una cuadrícula pintada. El benchmark informa de las actualizaciones por segundo escritas, los fotogramas por segundo dibujados, los fotogramas que perdieron su turno y el tiempo de dibujo por fotograma.

Modo servidor

TsgcGridServerProvider_DataSet pagina una tabla generada mediante FireDAC. Cada paso termina cuando sus filas están cargadas y el fotograma está pintado. Cada cifra es la mediana de 5 ejecuciones tras un calentamiento, con el archivo de la base de datos en la caché del sistema operativo. Los saltos caen 2.000 filas más allá de una ejecución a otra, de modo que cada ejecución lee de la base de datos y no de la caché de páginas de la cuadrícula.

La máquina de pruebas

CPUIntel Core Ultra 5 245T, 14 núcleos, 14 procesadores lógicos
Memoria31,5 GB
DiscoSSD NVMe, Phison de 1 TB
Sistema operativoWindows 11 Pro 26H2, compilación 26300.9711
CompiladorDelphi 13 (compilador 37.0), compilaciones release de Win32 y Win64
Base de datosSQLite 3.42.0 mediante FireDAC, incrustado y enlazado estáticamente
Código fuenteárbol de desarrollo de sgcGrid del 2026-11-04 (revisión svn 20169 con cambios locales)

La máquina era una estación de trabajo de desarrollo, no un servidor de benchmarks aislado. Cada ejecución pesada mantuvo un bloqueo para toda la máquina, de modo que no se ejecutó ninguna compilación ni prueba al mismo tiempo.

Puertas de rendimiento de QA

El grupo perf de la suite de QA de sgcGrid, ejecutado solo en Win32 y Win64. El presupuesto es el límite que impone la puerta (Win32 / Win64).

PuertaQué se mideWin32Win64Presupuesto
C1Fotograma plano de 1920 x 1080, 12 columnas, 100.000 filas1,47 ms1,29 ms4,09 / 4,32 ms
Con estiloEl mismo fotograma, celdas parpadeantes y 3 reglas de formato (media de 60 fotogramas)1,67 ms1,46 ms25 / 16 ms
GW3Fotograma con resaltado de búsqueda, 100.000 filas1,43 ms1,75 ms25 / 16 ms
GW5Fotograma con 20 columnas, 3 niveles de banda, 2 columnas congeladas, 100.000 filas1,62 ms1,42 ms25 / 16 ms
GW7Fotograma con columnas de imagen, progreso y minigráfico de 30 puntos, 100.000 filas2,20 ms3,20 ms25 / 16 ms
F1Fotograma con 2 columnas congeladas y un pie, desplazado en ambos sentidos, 100.000 filas0,56 ms0,50 ms25 / 16 ms
G4Fotograma de 1.000.000 de filas agrupadas por 2 columnas, todo expandido0,49 ms0,48 ms25 / 16 ms
D1Fotograma con 3 bandas de detalle visibles de 50 filas cada una2,47 ms2,65 ms25 / 16 ms
G1Agrupar 100.000 filas por 2 columnas, 2 resúmenes, construir y aplanar15,11 ms11,98 ms60 / 40 ms
G2Agrupar 1.000.000 de filas por 2 columnas, 2 resúmenes, construir y aplanar155,37 ms132,61 ms700 / 450 ms
G3Expandir o contraer un grupo de la vista de 1.000.000 de filas4,16 ms3,28 ms25 / 15 ms
G5Resúmenes de pie, 5 columnas de 100.000 filas5,64 ms2,34 ms25 / 15 ms
T1Árbol de 100.000 filas, hasta 8 niveles, construir y aplanar totalmente expandido20,42 ms22,80 ms90 / 60 ms
GW0Reconstrucción de la vista ordenada, 1.000.000 de filas253,45 ms240,29 ms268,24 / 259,62 ms
GW1Valores distintos de una columna de texto de 1.000 miembros, con un filtro en cascada, 1.000.000 de filas55,61 ms48,42 ms450 / 300 ms
GW2Filtro con una lista de 500 de 1.000 valores más una condición, 1.000.000 de filas50,75 ms48,02 ms225 / 150 ms
M1Memoria de la vista de líneas sobre los datos, 1.000.000 de filas agrupadas por 2 columnas20,07 MB20,09 MB32 MB
X1Exportación XLSX de 100.000 filas x 12 columnas, 2 niveles de grupo, resúmenes1.693,87 ms1.002,71 ms4.500 / 3.000 ms
L2Visor de registros que sigue el final mientras un hilo añade 10.000 líneas por segundo: fotogramas pintados por segundo38,87 fps38,67 fpsmínimo de 20 fps
L2La misma ejecución: percentil 99 del retardo de entrada4,22 ms2,83 ms33 ms

Actualizaciones en vivo a 60 fps

sgcGridBench_Live: un hilo de trabajo escribe precio, cambio, volumen y hora de una fila aleatoria con UpdateRow, mientras el hilo principal dibuja una cuadrícula ordenada y parpadeante de 1920 x 1080 cada 16,67 ms. 5 segundos por caso. Un turno perdido es un fotograma que terminó después del inicio del siguiente.

FilasRitmo objetivoPlataformaActualizaciones/sFotogramas/sTurnos perdidosDibujo, medianaDibujo, p99Dibujo, 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.000lo más rápido posibleWin321.552.85860,001,26 ms3,09 ms3,35 ms
1.000lo más rápido posibleWin642.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

Una cuadrícula ordenada de 100.000 filas vuelve a ordenar su vista en cada fotograma en que cambió la columna ordenada, por lo que su tiempo de dibujo crece con el número de filas. Las actualizaciones de columnas no ordenadas conservan la vista, y MaxFPS puede reducir la frecuencia de fotogramas de una cuadrícula que solo necesita parecer en vivo.

Tablas de base de datos de 1.000.000 y 10.000.000 de filas

sgcGridBench_Server sobre SQLite 3.42.0, Win64. La tabla tiene 12 columnas de tipos mixtos (entero, texto, coma flotante, fecha y hora, booleano), una clave entera indexada y una columna de cliente indexada, con datos deterministas. Cada paso termina con sus filas cargadas y el fotograma de 1920 x 1080 pintado. Mediana de 5 ejecuciones tras un calentamiento.

Paso1.000.000 de filas10.000.000 de filasQué se ejecuta en la base de datos
Apertura hasta la primera página pintada2,8 ms117,3 msColumnas del esquema, COUNT(*) exacto, primera página
Apertura con el recuento estimado2,1 ms2,1 msCountMode = gscEstimated: solo la primera página, el recuento crece mientras las páginas llegan completas
Recuento exacto de filas0,2 ms115,6 msSELECT COUNT(*)
Salto al medio40,1 ms378,8 msUna página en la fila central, LIMIT y OFFSET
Salto al final75,0 ms735,4 msLa última página, LIMIT y OFFSET
Ordenar por una columna indexada2,5 ms119,3 msORDER BY customer a través de su índice, más el recuento exacto de la nueva consulta
Ordenar por una columna sin índice106,9 ms1.169,3 msORDER BY amount DESC, un recorrido completo
Condición del generador de filtros97,5 ms975,7 msWHERE region = 'North' AND qty > 50, recuento y primera página (coinciden 40.000 y 400.000 filas)
Agrupación en el servidor, filas de grupo pintadas266,5 ms3.917,8 msGROUP BY region (12 grupos) con el recuento de filas de cada grupo, un recorrido completo
Memoria del proceso tras la ejecución76,5 MB75,7 MBConjunto de trabajo del proceso del benchmark, incluida la caché de páginas de SQLite

La propia cuadrícula lee solo las páginas en pantalla, así que su coste se mantiene constante. Lo que crece con la tabla es el trabajo de la base de datos: el recuento exacto, el OFFSET de un salto profundo y una ordenación o agrupación sobre una columna sin índice. Un índice en la columna ordenada o agrupada, o el recuento estimado, mantiene esos pasos cortos. Generar la tabla de 10.000.000 de filas tardó 42,5 s, y una segunda ejecución sobre el mismo archivo dio cifras dentro del 25% de estas.

SQL Server, PostgreSQL, Firebird y tablas de 100.000.000 de filas se miden con las mismas herramientas. Sus cifras se añadirán aquí cuando se hayan ejecutado. Hasta entonces, no se publica ningún número para ellos.

Mide en tu máquina y en tu base de datos

Los programas de benchmark están en la carpeta QA del código fuente de sgcUI, QA\Grid\Bench. Son programas de consola sin proyecto de IDE.

Compilar

build_bench.bat compila sgcGridBench_Server.exe y sgcGridBench_Live.exe para Win32 y Win64 con Delphi 13 en bin\win32 y bin\win64, y copia el archivo ini junto a ellos.

Modo servidor

sgcGridBench_Server.exe --rows=10000000 crea la tabla si falta, mide cada paso y escribe un informe en Markdown y una línea CSV por cifra. Opciones: --ini, --rows, --runs, --db, --generate, --out.

Otro motor

Edita sgcGridBench_Server.ini: DriverName es el controlador de FireDAC (MSSQL, PG, FB o SQLite), cada clave de [Params] va a la conexión, y Dialect elige el dialecto SQL. El ini incluye un ejemplo para cada motor.

Actualizaciones en vivo y puertas de QA

sgcGridBench_Live.exe --seconds=5 ejecuta los casos en vivo anteriores. Las puertas del cliente son el grupo perf de la suite de QA, sgcGridQA.exe --group=perf, que añade cada cifra a sgcGridQA_perf.txt. Ejecútalo solo en una máquina libre.

[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
La mejor opción: All-AccessTodos los productos de eSeGeCe, con Premium Support incluido, desde €1,059 al año.
Ver precios de All-Access

Prueba sgcGrid con tus datos

Descarga la prueba de sgcUI, abre las demos ServerModeAndCards y LiveTicker y apunta el benchmark a tu propia base de datos.