はじめに

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 への更新は、既存コードの修正なしで完了します。


ベンチマーク環境

項目内容
CPUAMD Ryzen 9 9900X(12 コア / 24 スレッド)
OSWindows 11 Pro
ランタイム.NET 8.0(x64、Release ビルド)
比較バージョンv4.3.13v4.4.0
計測方法各シナリオ ウォームアップ 1 回 + 計測 3 回、最小値 / 中央値を採用

パフォーマンス改善の詳細

1. 条件付き書式 + 一括データ投入: 約 11,700 倍高速化

シナリオ: A1:A5000 に対して条件付き書式ルール 1 件(「値が 100 を超えたら文字色を赤」)を設定したうえで、5,000 セルへ順次値を書き込みます。

バージョン所要時間
v4.3.1370,175 ms(約 70 秒)
v4.4.06 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.13397 ms
v4.4.039 ms
sheet.SortColumn(0, new RangePosition(0, 0, 10000, 5), SortOrder.Ascending);

業務上のメリット: 画面上のグリッドで大量データのソートを Excel と同等の操作感で扱えるようになります。

3. SetRangeData による一括ロード: 約 3 倍高速化

シナリオ: 10,000 行 × 20 列(計 20 万セル)の 2 次元配列を SetRangeData() で一括ロードします。

バージョン所要時間
v4.3.13326 ms
v4.4.0104 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 以降は商用版として提供しています。最新のアセンブリは、カスタマーポータルにサインインしてダウンロードできます。

既存プロジェクトでは、参照しているアセンブリをダウンロードしたバージョンに置き換えるだけでアップグレードが完了します。コードの修正は不要です。

ConditionalStyleApplyCells を直接参照していた場合のみ、上記のとおり HasConditionalStyle() への置き換えをお願いします。


おわりに

ReoGrid 4.4 は、新機能の追加よりも 既存ユーザーに最も影響の大きいパフォーマンス課題の解消 に焦点を当てたリリースです。

本記事に掲載した数値はすべて、同一環境で v4.3.13 と v4.4.0 を同じコードで比較した実測値です。

これまで処理時間が長く敬遠していたユースケースがあれば、ぜひ 4.4 でお試しください。


関連リンク