Introduction
ReoGrid is a .NET component that brings Excel-like spreadsheet functionality to WinForms and WPF applications.
The newly released ReoGrid 4.4 is a version that significantly improves processing performance while maintaining full API compatibility. In response to the many requests we have received from customers regarding “responsiveness when handling large data sets” and “time required for sort operations,” we have substantially accelerated the operations that were time-consuming in the 4.3 series.
This article introduces the main improvements in 4.4, supported by measured results comparing v4.3.13 and v4.4.0 in the same environment.
Key Improvements
- Bulk data loading with conditional formatting: approximately 11,700× faster (70 seconds → 6 milliseconds)
- Sorting 10,000 rows: approximately 10× faster
- Bulk loading 200,000 cells via
SetRangeData: approximately 3× faster
Upgrading from 4.3.13 to 4.4.0 requires no changes to existing code.
Benchmark Environment
| Item | Details |
|---|---|
| CPU | AMD Ryzen 9 9900X (12 cores / 24 threads) |
| OS | Windows 11 Pro |
| Runtime | .NET 8.0 (x64, Release build) |
| Versions compared | v4.3.13 ↔ v4.4.0 |
| Method | Each scenario: 1 warmup + 3 measurement runs, using min / median |
Performance Improvements in Detail
1. Conditional Formatting with Bulk Data Entry: ~11,700× Faster
Scenario: One conditional formatting rule (“set text color to red when value exceeds 100”) is applied to A1:A5000, then values are written sequentially into 5,000 cells.
| Version | Time |
|---|---|
| v4.3.13 | 70,175 ms (about 70 seconds) |
| 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;
}
Business impact: Workflows that load data from external systems into report templates with pre-configured conditional formatting now run smoothly without delay.
2. Sorting 10,000 Rows: ~10× Faster
Scenario: Sort 10,000 rows × 5 columns of random integers in ascending order by column A.
| Version | Time |
|---|---|
| v4.3.13 | 397 ms |
| v4.4.0 | 39 ms |
sheet.SortColumn(0, new RangePosition(0, 0, 10000, 5), SortOrder.Ascending);
Business impact: Large data sets can now be sorted in the on-screen grid with the same operational feel as Excel.
3. Bulk Loading via SetRangeData: ~3× Faster
Scenario: Bulk-load a 2D array of 10,000 rows × 20 columns (200,000 cells in total) via SetRangeData().
| Version | Time |
|---|---|
| v4.3.13 | 326 ms |
| v4.4.0 | 104 ms |
var data = new object[10000, 20];
// ... populate data ...
sheet.SetRangeData(new RangePosition(0, 0, 10000, 20), data);
Business impact: Initial-load operations that populate the grid with records retrieved from databases or CSV files complete in noticeably less time.
Bug Fixes
The main bug fixes are as follows.
- Formula parser: Added support for the unary plus operator (e.g.,
=+D25-F8-F14) - Formula parser: Added support for quoted sheet name references (e.g.,
'BS (JPY)'!B3,'My Sheet'!A1) - Sort: Fixed an issue where formula cells remained at their original positions during sorting. As in Excel, formulas now move together with their rows
- Conditional formatting: Fixed a defect in the rule removal order in
ClearConditionalStyles
API Changes
Impact on compatibility has been kept to a minimum, but the following API changes have been made.
Removed
Worksheet.ConditionalStyleApplyCellspropertyConditionalStyleApplyCellCollectionclass
Please use the following methods instead.
Added
bool hasStyle = worksheet.HasConditionalStyle(row, col);
bool hasStyle = worksheet.HasConditionalStyle(new CellPosition("A1"));
bool hasStyle = cell.HasConditionalStyles;
How to Upgrade
ReoGrid V4 and later are provided as commercial editions. The latest assemblies can be downloaded by signing in to our customer portal.
- Customer portal: https://portal.unvell.com/
For existing projects, the upgrade is completed simply by replacing the assembly reference with the downloaded version. No code changes are required.
If you were directly referencing ConditionalStyleApplyCells, please replace those references with HasConditionalStyle() as shown above.
Closing
ReoGrid 4.4 is a release that focuses on resolving the performance issues that have the greatest impact on existing users, rather than on adding new features.
All figures presented above are measured values obtained by comparing v4.3.13 and v4.4.0 with identical code in the same environment.
If there are any use cases that you previously avoided due to long processing times, we would be glad if you would give 4.4 a try.