sgcGrid 벤치마크

이 페이지의 모든 수치는 한 대의 머신에서 sgcGrid QA 성능 게이트와 QA 스위트에 포함된 두 벤치마크 프로그램으로 측정한 값입니다. 추정하거나 외삽한 값은 없습니다. 같은 프로그램을 직접 사용하는 하드웨어와 데이터베이스에서 실행해 자신의 수치를 확인하세요.

주요 수치

측정 항목Win32Win64
행 100,000개 그리드의 1920 x 1080 프레임, 열 12개 (QA 게이트 C1)1.47 ms1.29 ms
깜박이는 셀과 서식 규칙 3개를 적용한 같은 프레임1.67 ms1.46 ms
작업자 스레드가 정렬된 행 1,000개 그리드에 실시간 업데이트, 프레임은 60 Hz로 렌더링초당 업데이트 1,000건, 60.0 fps, 놓친 프레임 0개초당 업데이트 1,000건, 60.0 fps, 놓친 프레임 0개
같은 그리드가 60 fps를 유지하는 동안 작업자 스레드 하나의 최대 업데이트 속도1,552,858 건/초2,001,921 건/초
서버 모드, 행 10,000,000개 SQLite 테이블: 열어서 첫 페이지를 그릴 때까지실행 안 함117.3 ms (추정 행 수 사용 시 2.1 ms)

2026-11-04에 측정했습니다. 아래 표에 방법, 머신, 모든 수치가 나와 있습니다.

수치를 측정하는 방법

프레임

프레임은 1920 x 1080 그리드의 보이는 창이며, TsgcGridRenderer가 창 없이 래스터 캔버스에 렌더링합니다. VCL과 FireMonkey 그리드를 그리는 것과 같은 코드입니다. 과정에 창도 GPU도 없습니다. 그리드는 실시간 그리드처럼 프레임마다 조금씩 스크롤됩니다. C1과 다른 프레임 게이트는 워밍업 후 60프레임씩 5회 실행한 값의 중앙값을 사용합니다.

모델 작업

그룹화, 필터링, 정렬, 요약은 렌더러 없이 그리드 데이터 모델에서 실행됩니다. 각 수치는 워밍업 후 5회 실행의 중앙값이며, 게이트에 명시된 경우에는 번갈아 실행한 12회 중 최고값입니다. 모든 게이트에는 예산이 있고, 수치가 예산을 넘으면 QA 실행이 실패합니다.

실시간 업데이트

작업자 스레드가 LiveTicker 데모처럼 스레드 안전한 UpdateRow로 가격 업데이트를 씁니다. 메인 스레드는 16.67 ms(60 Hz)마다 프레임을 렌더링합니다. 모든 프레임은 그려지는 그리드처럼 변경된 뷰를 다시 정렬합니다. 벤치마크는 초당 기록한 업데이트 수, 초당 렌더링한 프레임 수, 제시간을 놓친 프레임 수, 프레임당 렌더링 시간을 보고합니다.

서버 모드

TsgcGridServerProvider_DataSet가 FireDAC을 통해 생성된 테이블을 페이지 단위로 읽습니다. 각 단계는 행이 로드되고 프레임이 그려지면 끝납니다. 각 수치는 데이터베이스 파일이 운영 체제 캐시에 있는 상태에서 워밍업 후 5회 실행한 값의 중앙값입니다. 점프 위치는 실행마다 2,000행씩 달라지므로 모든 실행이 그리드의 페이지 캐시가 아닌 데이터베이스에서 읽습니다.

테스트 머신

CPUIntel Core Ultra 5 245T, 코어 14개, 논리 프로세서 14개
메모리31.5 GB
디스크NVMe SSD, Phison 1 TB
운영 체제Windows 11 Pro 26H2, 빌드 26300.9711
컴파일러Delphi 13 (컴파일러 37.0), Win32와 Win64 릴리스 빌드
데이터베이스FireDAC을 통한 SQLite 3.42.0, 내장 및 정적 링크
소스2026-11-04의 sgcGrid 개발 트리 (로컬 변경이 포함된 svn 리비전 20169)

이 머신은 격리된 벤치마크 서버가 아니라 개발자 워크스테이션이었습니다. 무거운 실행마다 머신 전체 잠금을 걸어 두었으므로 빌드나 테스트가 동시에 실행되지 않았습니다.

QA 성능 게이트

sgcGrid QA 스위트의 perf 그룹을 Win32와 Win64에서 단독으로 실행했습니다. 예산은 게이트가 강제하는 한계입니다 (Win32 / Win64).

게이트측정 대상Win32Win64예산
C1평면 프레임 1920 x 1080, 열 12개, 행 100,000개1.47 ms1.29 ms4.09 / 4.32 ms
스타일 적용같은 프레임, 깜박이는 셀과 서식 규칙 3개 (60프레임 평균)1.67 ms1.46 ms25 / 16 ms
GW3찾기 강조가 있는 프레임, 행 100,000개1.43 ms1.75 ms25 / 16 ms
GW5열 20개, 밴드 수준 3개, 고정 열 2개가 있는 프레임, 행 100,000개1.62 ms1.42 ms25 / 16 ms
GW7이미지, 진행률, 30포인트 스파크라인 열이 있는 프레임, 행 100,000개2.20 ms3.20 ms25 / 16 ms
F1고정 열 2개와 바닥글이 있고 양방향으로 스크롤한 프레임, 행 100,000개0.56 ms0.50 ms25 / 16 ms
G4열 2개로 그룹화하고 모두 펼친 행 1,000,000개의 프레임0.49 ms0.48 ms25 / 16 ms
D1각각 50행인 보이는 상세 영역 3개가 있는 프레임2.47 ms2.65 ms25 / 16 ms
G1행 100,000개를 열 2개로 그룹화, 요약 2개, 빌드 및 평탄화15.11 ms11.98 ms60 / 40 ms
G2행 1,000,000개를 열 2개로 그룹화, 요약 2개, 빌드 및 평탄화155.37 ms132.61 ms700 / 450 ms
G3행 1,000,000개 뷰의 그룹 하나 펼치기 또는 접기4.16 ms3.28 ms25 / 15 ms
G5바닥글 요약, 행 100,000개의 열 5개5.64 ms2.34 ms25 / 15 ms
T1행 100,000개 트리, 깊이 최대 8, 모두 펼친 상태로 빌드 및 평탄화20.42 ms22.80 ms90 / 60 ms
GW0정렬된 뷰 다시 빌드, 행 1,000,000개253.45 ms240.29 ms268.24 / 259.62 ms
GW1멤버 1,000개인 텍스트 열의 고유 값, 연쇄 필터 포함, 행 1,000,000개55.61 ms48.42 ms450 / 300 ms
GW2값 1,000개 중 500개 목록과 조건 하나로 필터링, 행 1,000,000개50.75 ms48.02 ms225 / 150 ms
M1데이터 위 줄 뷰의 메모리, 열 2개로 그룹화한 행 1,000,000개20.07 MB20.09 MB32 MB
X1행 100,000개 x 열 12개의 XLSX 내보내기, 그룹 수준 2개, 요약1,693.87 ms1,002.71 ms4,500 / 3,000 ms
L2스레드가 초당 10,000줄을 추가하는 동안 끝을 따라가는 로그 뷰어: 초당 그린 프레임 수38.87 fps38.67 fps최소 20 fps
L2같은 실행: 입력 지연의 99번째 백분위수4.22 ms2.83 ms33 ms

60 fps 실시간 업데이트

sgcGridBench_Live: 작업자 스레드가 UpdateRow로 임의의 행의 가격, 변동, 거래량, 시간을 쓰는 동안 메인 스레드는 16.67 ms마다 정렬되고 깜박이는 1920 x 1080 그리드를 렌더링합니다. 사례당 5초. 놓친 슬롯은 다음 프레임이 시작된 뒤에 끝난 프레임입니다.

행 수목표 속도플랫폼업데이트/초프레임/초놓친 슬롯렌더링 중앙값렌더링 p99렌더링 최대
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,000가능한 한 빠르게Win321,552,85860.001.26 ms3.09 ms3.35 ms
1,000가능한 한 빠르게Win642,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

행 100,000개의 정렬된 그리드는 정렬 열이 바뀐 모든 프레임에서 뷰를 다시 정렬하므로 렌더링 시간이 행 수에 따라 늘어납니다. 정렬되지 않은 열의 업데이트는 뷰를 유지하며, MaxFPS로 실시간처럼 보이기만 하면 되는 그리드의 프레임 속도를 낮출 수 있습니다.

행 1,000,000개와 10,000,000개의 데이터베이스 테이블

SQLite 3.42.0에서 sgcGridBench_Server, Win64. 테이블은 혼합 형식(정수, 텍스트, 부동 소수점, 날짜와 시간, 불리언)의 열 12개, 인덱스가 있는 정수 키, 인덱스가 있는 고객 열로 이루어지며 데이터는 결정적으로 생성됩니다. 모든 단계는 행이 로드되고 1920 x 1080 프레임이 그려지면 끝납니다. 워밍업 후 5회 실행의 중앙값.

단계행 1,000,000개행 10,000,000개데이터베이스에서 실행되는 것
열어서 첫 페이지를 그릴 때까지2.8 ms117.3 ms스키마에서 열 가져오기, 정확한 COUNT(*), 첫 페이지
추정 행 수로 열기2.1 ms2.1 msCountMode = gscEstimated: 첫 페이지만 읽고, 페이지가 가득 찬 채 돌아오는 동안 행 수가 늘어납니다
정확한 행 수0.2 ms115.6 msSELECT COUNT(*)
가운데로 점프40.1 ms378.8 ms가운데 행의 한 페이지, LIMIT과 OFFSET
끝으로 점프75.0 ms735.4 ms마지막 페이지, LIMIT과 OFFSET
인덱스가 있는 열로 정렬2.5 ms119.3 ms인덱스를 통한 ORDER BY customer와 새 쿼리의 정확한 행 수
인덱스가 없는 열로 정렬106.9 ms1,169.3 msORDER BY amount DESC, 전체 스캔
필터 빌더 조건97.5 ms975.7 msWHERE region = 'North' AND qty > 50, 행 수와 첫 페이지 (일치하는 행 40,000개와 400,000개)
서버 그룹화, 그룹 행 그리기266.5 ms3,917.8 ms그룹별 행 수를 포함한 GROUP BY region (그룹 12개), 전체 스캔
실행 후 프로세스 메모리76.5 MB75.7 MB벤치마크 프로세스의 작업 집합, SQLite 페이지 캐시 포함

그리드 자체는 화면에 보이는 페이지만 읽으므로 자체 비용은 일정하게 유지됩니다. 테이블과 함께 커지는 것은 데이터베이스의 작업입니다. 정확한 행 수, 깊은 점프의 OFFSET, 인덱스가 없는 열의 정렬이나 그룹화가 그렇습니다. 정렬하거나 그룹화하는 열의 인덱스, 또는 추정 행 수를 사용하면 이 단계들이 짧게 유지됩니다. 행 10,000,000개 테이블을 생성하는 데 42.5 s가 걸렸고, 같은 파일에서 두 번째 실행한 수치는 이 값의 25% 이내였습니다.

SQL Server, PostgreSQL, Firebird, 그리고 행 100,000,000개 테이블도 같은 도구로 측정합니다. 실행이 끝나면 해당 수치를 여기에 추가할 예정입니다. 그때까지는 이들에 대한 수치를 게시하지 않습니다.

내 머신과 내 데이터베이스에서 측정하세요

벤치마크 프로그램은 sgcUI 소스의 QA 폴더인 QA\Grid\Bench에 있습니다. IDE 프로젝트가 없는 콘솔 프로그램입니다.

빌드

build_bench.bat는 Delphi 13으로 Win32와 Win64용 sgcGridBench_Server.exe와 sgcGridBench_Live.exe를 bin\win32와 bin\win64에 빌드하고, ini 파일을 그 옆에 복사합니다.

서버 모드

sgcGridBench_Server.exe --rows=10000000은 테이블이 없으면 만들고, 모든 단계를 측정한 뒤 Markdown 보고서와 수치당 CSV 한 줄을 기록합니다. 옵션: --ini, --rows, --runs, --db, --generate, --out.

다른 엔진

sgcGridBench_Server.ini를 편집하세요. DriverName은 FireDAC 드라이버(MSSQL, PG, FB 또는 SQLite)이고, [Params]의 모든 키는 연결로 전달되며, Dialect는 SQL 방언을 선택합니다. ini에는 엔진별 예제가 들어 있습니다.

실시간 업데이트와 QA 게이트

sgcGridBench_Live.exe --seconds=5는 위의 실시간 사례를 실행합니다. 클라이언트 게이트는 QA 스위트의 perf 그룹인 sgcGridQA.exe --group=perf이며, 모든 수치를 sgcGridQA_perf.txt에 추가합니다. 유휴 상태의 머신에서 단독으로 실행하세요.

[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
최고의 가성비: All-Access모든 eSeGeCe 제품과 프리미엄 지원이 포함되어 연 €1,059부터 이용할 수 있어요.
All-Access 가격 보기

내 데이터로 sgcGrid를 사용해 보세요

sgcUI 체험판을 다운로드하고 ServerModeAndCards와 LiveTicker 데모를 연 다음, 벤치마크를 자신의 데이터베이스로 향하게 하세요.