はじめに
ReoGrid は、WinForms / WPF アプリケーションに Excel ライクなスプレッドシート機能を提供する .NET コンポーネントです。
このたびリリースした ReoGrid 4.4 は、API 互換性を維持しながら処理性能を大幅に改善したバージョンです。「大量データ処理時の応答性」「ソート操作の所要時間」など、お客様から数多く頂いていた声に応え、4.3 系で時間がかかっていた操作を抜本的に高速化しました。
本記事では 4.4 の主要な改善点を、同一環境で v4.3.13 と v4.4.0 を比較した実測結果とあわせてご紹介します。
主要な改善点
- 条件付き書式を伴う一括データ投入: 約 11,700 倍高速化(70 秒 → 6 ミリ秒)
- 1 万行のソート: 約 10 倍高速化
SetRangeDataによる 20 万セル一括ロード: 約 3 倍高速化
4.3.13 から 4.4.0 への更新は、既存コードの修正なしで完了します。
ベンチマーク環境
| 項目 | 内容 |
|---|---|
| CPU | AMD Ryzen 9 9900X(12 コア / 24 スレッド) |
| OS | Windows 11 Pro |
| ランタイム | .NET 8.0(x64、Release ビルド) |
| 比較バージョン | v4.3.13 ↔ v4.4.0 |
| 計測方法 | 各シナリオ ウォームアップ 1 回 + 計測 3 回、最小値 / 中央値を採用 |
パフォーマンス改善の詳細
1. 条件付き書式 + 一括データ投入: 約 11,700 倍高速化
シナリオ: A1:A5000 に対して条件付き書式ルール 1 件(「値が 100 を超えたら文字色を赤」)を設定したうえで、5,000 セルへ順次値を書き込みます。
| バージョン | 所要時間 |
|---|---|
| v4.3.13 | 70,175 ms(約 70 秒) |
| v4.4.0 | 6 ms |
sheet.ConditionalStyles.Add(new Rule("THIS > 100", "A1:A5000", new WorksheetRangeStyle
{
Flag = PlainStyleFlag.TextColor,
TextColor = SolidColor.Red,
}));
for (int r = 0; r < 5000; r++)
{
sheet[r, 0] = r;
}
業務上のメリット: あらかじめ条件付き書式が設定されたレポートテンプレートに外部システムのデータを流し込むワークフローが、待ち時間なくスムーズに実行できるようになります。
2. 1 万行のソート: 約 10 倍高速化
シナリオ: ランダムな整数で構成された 10,000 行 × 5 列を、A 列を基準に昇順ソートします。
| バージョン | 所要時間 |
|---|---|
| v4.3.13 | 397 ms |
| v4.4.0 | 39 ms |
sheet.SortColumn(0, new RangePosition(0, 0, 10000, 5), SortOrder.Ascending);
業務上のメリット: 画面上のグリッドで大量データのソートを Excel と同等の操作感で扱えるようになります。
3. SetRangeData による一括ロード: 約 3 倍高速化
シナリオ: 10,000 行 × 20 列(計 20 万セル)の 2 次元配列を SetRangeData() で一括ロードします。
| バージョン | 所要時間 |
|---|---|
| v4.3.13 | 326 ms |
| v4.4.0 | 104 ms |
var data = new object[10000, 20];
// ... データを格納 ...
sheet.SetRangeData(new RangePosition(0, 0, 10000, 20), data);
業務上のメリット: データベースや CSV から取得したレコードをグリッドへ流し込む初期表示が、目に見える形で短縮されます。
不具合修正
主な修正は次のとおりです。
- 数式パーサ: 単項プラス演算子に対応(例:
=+D25-F8-F14) - 数式パーサ: 引用符付きシート名参照に対応(例:
'BS (JPY)'!B3、'My Sheet'!A1) - ソート: 並べ替え時に数式セルが元の位置に残ってしまう問題を修正。Excel と同様に、数式は行とともに移動するようになりました
- 条件付き書式:
ClearConditionalStylesにおけるルール削除順序の不具合を修正
API の変更
互換性への影響を最小限に抑えていますが、以下の API 変更を行っています。
削除
Worksheet.ConditionalStyleApplyCellsプロパティConditionalStyleApplyCellCollectionクラス
代わりに次のメソッドをご利用ください。
追加
bool hasStyle = worksheet.HasConditionalStyle(row, col);
bool hasStyle = worksheet.HasConditionalStyle(new CellPosition("A1"));
bool hasStyle = cell.HasConditionalStyles;
アップグレード方法
ReoGrid V4 以降は商用版として提供しています。最新のアセンブリは、カスタマーポータルにサインインしてダウンロードできます。
- カスタマーポータル: https://portal.unvell.com/
既存プロジェクトでは、参照しているアセンブリをダウンロードしたバージョンに置き換えるだけでアップグレードが完了します。コードの修正は不要です。
ConditionalStyleApplyCells を直接参照していた場合のみ、上記のとおり HasConditionalStyle() への置き換えをお願いします。
おわりに
ReoGrid 4.4 は、新機能の追加よりも 既存ユーザーに最も影響の大きいパフォーマンス課題の解消 に焦点を当てたリリースです。
本記事に掲載した数値はすべて、同一環境で v4.3.13 と v4.4.0 を同じコードで比較した実測値です。
これまで処理時間が長く敬遠していたユースケースがあれば、ぜひ 4.4 でお試しください。
