sgcGrid ベンチマーク
このページの数値はすべて、1 台のマシンで sgcGrid の QA パフォーマンスゲートと、QA スイートに含まれる 2 つのベンチマークプログラムを使って測定したものです。推定値や外挿値はありません。同じプログラムをご自身のハードウェアとデータベースで実行して、ご自身の数値を確認してください。
このページの数値はすべて、1 台のマシンで sgcGrid の QA パフォーマンスゲートと、QA スイートに含まれる 2 つのベンチマークプログラムを使って測定したものです。推定値や外挿値はありません。同じプログラムをご自身のハードウェアとデータベースで実行して、ご自身の数値を確認してください。
| 測定項目 | Win32 | Win64 |
|---|---|---|
| 100,000 行グリッドの 1920 x 1080 フレーム、12 列 (QA ゲート C1) | 1.47 ms | 1.29 ms |
| 点滅するセルと 3 つの書式ルールを使った同じフレーム | 1.67 ms | 1.46 ms |
| ワーカースレッドから並べ替え済みの 1,000 行グリッドへのライブ更新、フレームは 60 Hz で描画 | 1 秒あたり 1,000 件の更新、60.0 fps、取りこぼしフレーム 0 | 1 秒あたり 1,000 件の更新、60.0 fps、取りこぼしフレーム 0 |
| 同じグリッドが 60 fps を保つ間の、ワーカースレッド 1 つの最高更新レート | 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) ごとに 1 フレームを描画します。各フレームでは、描画されるグリッドと同じように、変更されたビューを並べ替え直します。ベンチマークは、書き込んだ 1 秒あたりの更新数、描画した 1 秒あたりのフレーム数、スロットに間に合わなかったフレーム数、1 フレームあたりの描画時間を報告します。
TsgcGridServerProvider_DataSet が、生成したテーブルを FireDAC 経由でページ単位に読み込みます。各ステップは、行の読み込みとフレームの描画が終わった時点で完了します。各数値は、データベースファイルが OS のキャッシュにある状態で、ウォームアップ後の 5 回の実行の中央値です。ジャンプ先は実行ごとに 2,000 行ずつずれるため、毎回の実行がグリッドのページキャッシュではなくデータベースから読み込みます。
| CPU | Intel Core Ultra 5 245T、14 コア、論理プロセッサ 14 個 |
| メモリ | 31.5 GB |
| ディスク | NVMe SSD、Phison 1 TB |
| OS | Windows 11 Pro 26H2、ビルド 26300.9711 |
| コンパイラ | Delphi 13 (コンパイラ 37.0)、Win32 と Win64 のリリースビルド |
| データベース | FireDAC 経由の SQLite 3.42.0、組み込みで静的リンク |
| ソース | 2026-11-04 の sgcGrid 開発ツリー (ローカル変更あり、svn リビジョン 20169) |
このマシンは、分離されたベンチマーク専用サーバーではなく、開発者のワークステーションでした。負荷の高い実行ではそれぞれマシン全体のロックを保持したため、ビルドやテストが同時に動くことはありませんでした。
sgcGrid QA スイートの perf グループを、Win32 と Win64 で単独実行したものです。予算は、ゲートが強制する上限です (Win32 / Win64)。
| ゲート | 測定内容 | Win32 | Win64 | 予算 |
|---|---|---|---|---|
| C1 | フラットなフレーム 1920 x 1080、12 列、100,000 行 | 1.47 ms | 1.29 ms | 4.09 / 4.32 ms |
| スタイル付き | 同じフレーム、点滅するセルと 3 つの書式ルール (60 フレームの平均) | 1.67 ms | 1.46 ms | 25 / 16 ms |
| GW3 | 検索ハイライト付きのフレーム、100,000 行 | 1.43 ms | 1.75 ms | 25 / 16 ms |
| GW5 | 20 列、3 段のバンド、固定列 2 つのフレーム、100,000 行 | 1.62 ms | 1.42 ms | 25 / 16 ms |
| GW7 | 画像、進捗、30 点スパークラインの列があるフレーム、100,000 行 | 2.20 ms | 3.20 ms | 25 / 16 ms |
| F1 | 固定列 2 つとフッターがあり、両方向にスクロールしたフレーム、100,000 行 | 0.56 ms | 0.50 ms | 25 / 16 ms |
| G4 | 2 列でグループ化し、すべて展開した 1,000,000 行のフレーム | 0.49 ms | 0.48 ms | 25 / 16 ms |
| D1 | 50 行ずつの詳細バンドが 3 つ表示されたフレーム | 2.47 ms | 2.65 ms | 25 / 16 ms |
| G1 | 100,000 行を 2 列でグループ化、集計 2 つ、構築と平坦化 | 15.11 ms | 11.98 ms | 60 / 40 ms |
| G2 | 1,000,000 行を 2 列でグループ化、集計 2 つ、構築と平坦化 | 155.37 ms | 132.61 ms | 700 / 450 ms |
| G3 | 1,000,000 行ビューの 1 つのグループの展開または折りたたみ | 4.16 ms | 3.28 ms | 25 / 15 ms |
| G5 | フッター集計、100,000 行の 5 列 | 5.64 ms | 2.34 ms | 25 / 15 ms |
| T1 | 100,000 行のツリー、深さ最大 8、すべて展開した状態で構築と平坦化 | 20.42 ms | 22.80 ms | 90 / 60 ms |
| GW0 | 並べ替え済みビューの再構築、1,000,000 行 | 253.45 ms | 240.29 ms | 268.24 / 259.62 ms |
| GW1 | メンバー 1,000 個のテキスト列の固有値、カスケードフィルター付き、1,000,000 行 | 55.61 ms | 48.42 ms | 450 / 300 ms |
| GW2 | 1,000 個の値から 500 個を選んだリストと条件 1 つによるフィルター、1,000,000 行 | 50.75 ms | 48.02 ms | 225 / 150 ms |
| M1 | データ上の行ビューのメモリ、2 列でグループ化した 1,000,000 行 | 20.07 MB | 20.09 MB | 32 MB |
| X1 | 100,000 行 x 12 列の XLSX エクスポート、グループ 2 段、集計付き | 1,693.87 ms | 1,002.71 ms | 4,500 / 3,000 ms |
| L2 | スレッドが 1 秒に 10,000 行を追記する間、末尾を追従するログビューア: 1 秒あたりの描画フレーム数 | 38.87 fps | 38.67 fps | 最低 20 fps |
| L2 | 同じ実行: 入力遅延の 99 パーセンタイル | 4.22 ms | 2.83 ms | 33 ms |
sgcGridBench_Live: ワーカースレッドが UpdateRow でランダムな行の価格、変動、出来高、時刻を書き込む間、メインスレッドは並べ替え済みで点滅する 1920 x 1080 のグリッドを 16.67 ms ごとに描画します。1 ケースあたり 5 秒。取りこぼしスロットとは、次のフレームの開始後に終わったフレームのことです。
| 行数 | 目標レート | プラットフォーム | 更新数/秒 | フレーム数/秒 | 取りこぼしスロット | 描画の中央値 | 描画 p99 | 描画の最大値 |
|---|---|---|---|---|---|---|---|---|
| 1,000 | 1,000/s | Win32 | 1,000 | 60.0 | 0 | 1.28 ms | 2.46 ms | 2.57 ms |
| 1,000 | 1,000/s | Win64 | 1,000 | 60.0 | 0 | 1.36 ms | 2.41 ms | 2.45 ms |
| 1,000 | 10,000/s | Win32 | 9,998 | 60.0 | 0 | 1.43 ms | 2.79 ms | 2.98 ms |
| 1,000 | 10,000/s | Win64 | 9,998 | 60.0 | 0 | 1.29 ms | 2.46 ms | 3.17 ms |
| 1,000 | 可能な限り高速 | Win32 | 1,552,858 | 60.0 | 0 | 1.26 ms | 3.09 ms | 3.35 ms |
| 1,000 | 可能な限り高速 | Win64 | 2,001,921 | 60.0 | 0 | 1.26 ms | 2.54 ms | 3.28 ms |
| 100,000 | 1,000/s | Win32 | 1,000 | 60.0 | 0 | 10.52 ms | 13.72 ms | 15.92 ms |
| 100,000 | 1,000/s | Win64 | 1,000 | 60.0 | 0 | 10.50 ms | 13.99 ms | 14.68 ms |
| 100,000 | 10,000/s | Win32 | 9,966 | 47.6 | 62 | 14.70 ms | 40.33 ms | 42.03 ms |
| 100,000 | 10,000/s | Win64 | 9,997 | 54.2 | 29 | 13.59 ms | 35.10 ms | 39.86 ms |
100,000 行の並べ替え済みグリッドは、並べ替え列が変わったフレームごとにビューを並べ替え直すため、描画時間は行数に応じて増えます。並べ替えていない列の更新ではビューが保たれ、見た目だけライブであればよいグリッドは MaxFPS でフレームレートを下げられます。
SQLite 3.42.0 上の sgcGridBench_Server、Win64。テーブルは、混在する型 (整数、テキスト、浮動小数点、日付と時刻、ブール) の 12 列と、インデックス付きの整数キー、インデックス付きの顧客列を持ち、データは決定的に生成されます。各ステップは、行の読み込みと 1920 x 1080 フレームの描画が終わった時点で完了します。ウォームアップ後の 5 回の実行の中央値。
| ステップ | 1,000,000 行 | 10,000,000 行 | データベースで実行される処理 |
|---|---|---|---|
| 開いて最初のページを描画するまで | 2.8 ms | 117.3 ms | スキーマからの列、正確な COUNT(*)、最初のページ |
| 推定行数で開く | 2.1 ms | 2.1 ms | CountMode = gscEstimated: 最初のページのみ、ページが満杯で返る間は行数が増えます |
| 正確な行数 | 0.2 ms | 115.6 ms | SELECT COUNT(*) |
| 中央へジャンプ | 40.1 ms | 378.8 ms | 中央の行にある 1 ページ、LIMIT と OFFSET |
| 末尾へジャンプ | 75.0 ms | 735.4 ms | 最後のページ、LIMIT と OFFSET |
| インデックス付きの列で並べ替え | 2.5 ms | 119.3 ms | インデックスを使った ORDER BY customer と、新しいクエリの正確な行数 |
| インデックスのない列で並べ替え | 106.9 ms | 1,169.3 ms | ORDER BY amount DESC、フルスキャン |
| フィルタービルダーの条件 | 97.5 ms | 975.7 ms | WHERE region = 'North' AND qty > 50、行数と最初のページ (一致するのは 40,000 行と 400,000 行) |
| サーバー側グループ化、グループ行の描画 | 266.5 ms | 3,917.8 ms | 各グループの行数を含む GROUP BY region (12 グループ)、フルスキャン |
| 実行後のプロセスメモリ | 76.5 MB | 75.7 MB | ベンチマークプロセスのワーキングセット、SQLite のページキャッシュを含む |
グリッド自体は画面上のページだけを読み込むため、そのコストは一定のままです。テーブルとともに増えるのは、データベース側の処理です。正確な行数、深いジャンプの OFFSET、インデックスのない列での並べ替えやグループ化がそれにあたります。並べ替えやグループ化に使う列のインデックス、または推定行数を使うと、これらのステップは短く保たれます。10,000,000 行のテーブルの生成には 42.5 s かかり、同じファイルでの 2 回目の実行では、この値の 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 には各エンジンのサンプルが入っています。
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