[{"data":1,"prerenderedAt":1166},["ShallowReactive",2],{"blog-en-reogrid-v5-release":3},{"id":4,"title":5,"author":6,"body":7,"date":1148,"description":1149,"extension":1150,"meta":1151,"navigation":1152,"path":1153,"seo":1154,"stem":1157,"tags":1158,"thumbnail":1164,"__hash__":1165},"blog_en/blog/en/reogrid-v5-release.md","ReoGrid V5 Released — Full Virtualization on Line One, Making a Million Rows Ordinary",null,{"type":8,"value":9,"toc":1127},"minimark",[10,19,30,37,48,54,57,62,65,71,78,81,83,87,93,96,104,107,109,113,116,123,126,212,218,223,226,233,359,365,372,378,384,386,390,393,400,407,410,463,469,476,480,487,541,547,550,552,556,559,616,622,624,628,634,637,640,758,763,770,786,789,791,795,798,813,823,829,846,856,863,865,869,902,956,958,962,969,995,998,1005,1007,1011,1022,1029,1035,1041,1043,1047,1054,1072,1074,1078,1085,1124],[11,12,13,14,18],"p",{},"UNVELL Inc. has released ",[15,16,17],"strong",{},"ReoGrid V5",", the next generation of its spreadsheet component for .NET, on August 25, 2026.",[11,20,21,22,25,26,29],{},"V5 is an extension of nothing. It is a ",[15,23,24],{},"next generation rebuilt from the core",", with ",[15,27,28],{},"full virtualization placed on line one of the design"," rather than added later as an optimization — and the data structures and renderer were rebuilt around it.",[11,31,32,33,36],{},"The result: ",[15,34,35],{},"a frame costs the same ~6.5 ms whether the sheet holds a hundred thousand rows or a million."," There is one reason for that. What sets the workload is the range you can see, not the volume of data behind it. It leaves room inside the 16.7 ms a frame gets at 60fps.",[11,38,39,40,43,44,47],{},"Of those 6.5 milliseconds, pulling the data out of the sheet accounts for ",[15,41,42],{},"30.4 microseconds"," and allocates ",[15,45,46],{},"zero bytes"," — 0.2% of the frame budget. Everything else stays available for drawing and for your own code.",[11,49,50,53],{},[15,51,52],{},"Ten rows or a million rows, the sheet feels the same in your hands."," That is where V5 starts, and where it arrives.",[55,56],"hr",{},[58,59,61],"h2",{"id":60},"not-made-faster-rebuilt-in-a-shape-that-is-fast","Not \"made faster\" — rebuilt in a shape that is fast",[11,63,64],{},"There are two ways to improve performance. You can find bottlenecks and remove them one at a time, or you can rebuild the structure so the bottleneck never forms.",[11,66,67,68],{},"ReoGrid has spent years doing the first. In V4.4 alone, bulk data loading with conditional formatting became roughly 11,700× faster and sorting roughly 10× faster. But that work made something clear: ",[15,69,70],{},"the remaining ceiling was in the design, not in the implementation.",[11,72,73,74,77],{},"In the previous design, every occupied cell is one CLR object — ",[15,75,76],{},"about 300 bytes each, measured",". Hold a million rows by fifty columns naively and you are already in gigabyte territory. No amount of tuning individual operations gets you to \"a million rows, handled normally\" on that foundation.",[11,79,80],{},"So V5 rebuilds the foundation.",[55,82],{},[58,84,86],{"id":85},"what-went-on-line-one-full-virtualization","What went on line one: full virtualization",[11,88,89,90],{},"Treat virtualization as something you add later and there will always be a gap. The renderer is virtualized, but conditional formatting still sweeps the whole sheet. Scrolling is smooth, but colouring an entire column freezes the UI. ",[15,91,92],{},"One remaining full scan anywhere becomes the new ceiling.",[11,94,95],{},"V5 takes a single principle and carries it everywhere:",[97,98,99],"blockquote",{},[11,100,101],{},[15,102,103],{},"The work is proportional to the window you are looking at, not to the size of the sheet.",[11,105,106],{},"That applies not only to drawing, but to input, evaluation, formatting, search and I/O. What follows is the evidence.",[55,108],{},[58,110,112],{"id":111},"why-it-is-fast-part-1-a-small-cell-drives-the-cost-of-memory-management-to-the-floor","Why it is fast, part 1 — a small cell drives the cost of memory management to the floor",[11,114,115],{},"Speed starts with carrying a lighter load. Small data fits in CPU cache, and it gives the garbage collector far less to look after.",[11,117,118,119,122],{},"The V5 core store is row-chunked and column-oriented, with adaptive blocks. Cell values are packed as a 16-byte value type; styles and strings are interned. ",[15,120,121],{},"The store holds exactly the cells that carry values",", so a sheet that is merely declared large stays light.",[11,124,125],{},"Measured on .NET 10, Server GC, 64-bit (June 19, 2026; re-verified August 25, 2026):",[127,128,129,149],"table",{},[130,131,132],"thead",{},[133,134,135,139,143,146],"tr",{},[136,137,138],"th",{},"Scenario",[136,140,142],{"align":141},"right","Occupied cells",[136,144,145],{"align":141},"Heap",[136,147,148],{"align":141},"Per cell",[150,151,152,169,182,197],"tbody",{},[133,153,154,158,161,164],{},[155,156,157],"td",{},"Dense 200,000 × 50 (numbers)",[155,159,160],{"align":141},"10,000,000",[155,162,163],{"align":141},"155 MB",[155,165,166],{"align":141},[15,167,168],{},"16.3 B",[133,170,171,174,176,178],{},[155,172,173],{},"Dense 200,000 × 50 (200 distinct strings)",[155,175,160],{"align":141},[155,177,163],{"align":141},[155,179,180],{"align":141},[15,181,168],{},[133,183,184,187,189,192],{},[155,185,186],{},"Dense 200,000 × 50 + 5 styles",[155,188,160],{"align":141},[155,190,191],{"align":141},"194 MB",[155,193,194],{"align":141},[15,195,196],{},"20.4 B",[133,198,199,202,205,207],{},[155,200,201],{},"Uniformly scattered sparse data (worst case)",[155,203,204],{"align":141},"—",[155,206,204],{"align":141},[155,208,209],{"align":141},[15,210,211],{},"23.4 B",[11,213,214,217],{},[15,215,216],{},"Ten million cells for about 155 MB"," — comfortably inside a laptop's memory.",[219,220,222],"h3",{"id":221},"measured-head-to-head-against-the-previous-generation","Measured head-to-head against the previous generation",[11,224,225],{},"V4 stores one CLR object per occupied cell — the way spreadsheet components are conventionally built. So this is, in effect, a comparison against the standard design.",[11,227,228,229,232],{},"Measured on AMD Ryzen 9 9900X / Windows 11 / .NET 10.0.10 / ",[15,230,231],{},"Workstation GC",", median of 3 runs (August 25, 2026):",[127,234,235,250],{},[130,236,237],{},[133,238,239,242,244,247],{},[136,240,241],{},"Measurement",[136,243,17],{"align":141},[136,245,246],{"align":141},"Previous generation (V4)",[136,248,249],{"align":141},"Ratio",[150,251,252,271,289,306,323,341],{},[133,253,254,257,263,266],{},[155,255,256],{},"Holding 10M cells (200,000 × 50, numbers)",[155,258,259,262],{"align":141},[15,260,261],{},"16.4 B/cell"," (156 MB)",[155,264,265],{"align":141},"298.2 B/cell (2.78 GB)",[155,267,268],{"align":141},[15,269,270],{},"18.2×",[133,272,273,276,281,284],{},[155,274,275],{},"Time to write them",[155,277,278],{"align":141},[15,279,280],{},"727 ms",[155,282,283],{"align":141},"8.9 s",[155,285,286],{"align":141},[15,287,288],{},"12.2×",[133,290,291,294,298,301],{},[155,292,293],{},"Holding 10M cells (200 distinct strings)",[155,295,296],{"align":141},[15,297,261],{},[155,299,300],{"align":141},"234.2 B/cell",[155,302,303],{"align":141},[15,304,305],{},"14.3×",[133,307,308,311,316,319],{},[155,309,310],{},"Holding 20M cells (1,000,000 × 20)",[155,312,313],{"align":141},[15,314,315],{},"312 MB",[155,317,318],{"align":141},"5.54 GB",[155,320,321],{"align":141},[15,322,270],{},[133,324,325,328,333,336],{},[155,326,327],{},"Formatting a whole column of a 1,048,576-row sheet",[155,329,330],{"align":141},[15,331,332],{},"0.89 ms",[155,334,335],{"align":141},"10 ms",[155,337,338],{"align":141},[15,339,340],{},"11.1×",[133,342,343,346,351,354],{},[155,344,345],{},"Formatting 10M cells (peak memory)",[155,347,348],{"align":141},[15,349,350],{},"235 MB",[155,352,353],{"align":141},"4.25 GB",[155,355,356],{"align":141},[15,357,358],{},"18.5×",[11,360,361,364],{},[15,362,363],{},"The same data, in one eighteenth of the memory."," A million rows by twenty columns cost 5.54 GB under the previous design — server-class memory, in practice. V5 holds it in 312 MB.",[11,366,367,368,371],{},"Note: V4 was given its best showing, using the bulk-loading path it documents itself (data-changed events suspended, formula recalculation off). What the numbers show is not rough implementation but a ",[15,369,370],{},"difference of design generation",". V4 remains on sale and under maintenance.",[11,373,374,375],{},"Interning collapses strings to the same cost as numbers. Styles behave the same way: ",[15,376,377],{},"apply one format to two million cells and exactly one style instance is retained.",[11,379,380,381],{},"The worst-case row matters most. A naive block structure swells to 146 bytes per cell on uniformly scattered data — back to the previous generation's level — which is exactly why the store keeps sparse regions sparse and promotes a block to dense only once it earns it. ",[15,382,383],{},"Whatever shape your data arrives in, the same speed comes out.",[55,385],{},[58,387,389],{"id":388},"why-it-is-fast-part-2-the-visible-window-sets-the-workload-not-the-sheet","Why it is fast, part 2 — the visible window sets the workload, not the sheet",[11,391,392],{},"Carry a light load, and move only as much of it as you need. That is the second pillar.",[11,394,395,396,399],{},"What a spreadsheet feels like in the hand comes down to ",[15,397,398],{},"what happens on every frame"," more than to total memory. Allocate even a little while scrolling and it eventually becomes a garbage collection, which arrives at your fingertips as a dropped frame.",[11,401,402,403,406],{},"The V5 read path for the viewport is ",[15,404,405],{},"completely allocation-free",".",[11,408,409],{},"Measured on a 200,000 × 50 sheet, reading a 60 × 40 window 1,000 times (August 25, 2026, Workstation GC):",[127,411,412,425],{},[130,413,414],{},[133,415,416,419,421,423],{},[136,417,418],{},"Per read",[136,420,17],{"align":141},[136,422,246],{"align":141},[136,424,249],{"align":141},[150,426,427,445],{},[133,428,429,432,437,440],{},[155,430,431],{},"Time",[155,433,434],{"align":141},[15,435,436],{},"30.4 µs",[155,438,439],{"align":141},"95.4 µs",[155,441,442],{"align":141},[15,443,444],{},"3.1×",[133,446,447,450,455,458],{},[155,448,449],{},"Allocated",[155,451,452],{"align":141},[15,453,454],{},"1.2 B",[155,456,457],{"align":141},"90.8 B",[155,459,460],{"align":141},[15,461,462],{},"78.8×",[11,464,465,466,468],{},"Note: V5's 1.2 B is what the harness observed process-wide. The read path itself allocates ",[15,467,46],{},", confirmed by per-thread measurement in the store-level benchmark (Server GC, 16.9 µs per read).",[11,470,471,472,475],{},"A sheet may declare 1,048,576 rows; the cost of a read is still set by the window alone. ",[15,473,474],{},"The read path produces zero bytes of garbage, so adding rows adds no GC pressure"," — fling the scrollbar to the far end and the grid tracks your finger the whole way.",[219,477,479],{"id":478},"measured-by-actually-painting-a-frame","Measured by actually painting a frame",[11,481,482,483,486],{},"We also measured ",[15,484,485],{},"a full frame — reading the cells and drawing them to the screen",". A 1600×900 grid showing twenty columns, median of 200 renders after 30 warm-up passes (Apple M4 Pro / macOS / .NET 10 / Avalonia + Skia, August 25, 2026):",[127,488,489,502],{},[130,490,491],{},[133,492,493,496,499],{},[136,494,495],{},"Rows of data in the sheet",[136,497,498],{},"Position",[136,500,501],{"align":141},"Frame paint",[150,503,504,517,529],{},[133,505,506,509,512],{},[155,507,508],{},"100,000",[155,510,511],{},"top",[155,513,514],{"align":141},[15,515,516],{},"6.51 ms",[133,518,519,522,524],{},[155,520,521],{},"1,000,000",[155,523,511],{},[155,525,526],{"align":141},[15,527,528],{},"6.55 ms",[133,530,531,533,536],{},[155,532,521],{},[155,534,535],{},"scrolled to the last row",[155,537,538],{"align":141},[15,539,540],{},"8.23 ms",[11,542,543,546],{},[15,544,545],{},"Multiply the row count by ten and the frame moves from 6.51 ms to 6.55 ms — 0.6%."," That is full virtualization as a measurement. V5 severs the link between how much data you hold and how heavy the grid feels.",[11,548,549],{},"A frame gets 16.7 milliseconds at 60fps. A million-row sheet scrolled to its final row still fits inside that.",[55,551],{},[58,553,555],{"id":554},"why-it-is-fast-part-3-the-same-principle-all-the-way-down","Why it is fast, part 3 — the same principle, all the way down",[11,557,558],{},"This is where most of the V5 effort went. Plenty of products have a virtualized renderer. What actually stalls a line-of-business application is usually everything around it. V5 removed the full scans one by one.",[560,561,562,569,579,589,595,604,610],"ul",{},[563,564,565,568],"li",{},[15,566,567],{},"Conditional formatting"," — rules are evaluated only for visible cells. Range statistics (min, max, average, rank) are cached per frame, so a colour scale over a million rows does not slow scrolling.",[563,570,571,574,575,578],{},[15,572,573],{},"Cell types (checkboxes, dropdowns and so on)"," — instead of one instance per cell, these are range-scoped flyweights. ",[15,576,577],{},"A checkbox column a million rows tall is one entry plus one shared descriptor."," Drawing and hit-testing touch only the visible range.",[563,580,581,584,585,588],{},[15,582,583],{},"Banded (alternating) rows"," — nothing is written into cells. The sheet holds a single banding definition, resolved at draw time. ",[15,586,587],{},"A million banded rows is one object",", and it survives sorting, filtering and row insertion intact.",[563,590,591,594],{},[15,592,593],{},"Formatting whole rows and columns"," — these route to row and column default styles, so the cost tracks the number of lines, not the number of cells. Colouring an entire column on a 1,048,576-row sheet takes a measured 0.89 ms. Clear, border and number-format operations clamp to the used range.",[563,596,597,600,601,406],{},[15,598,599],{},"Find and replace"," — the scan walks the store's 256-row chunks and visits only cells that actually exist. On a sheet declared a million rows tall, ",[15,602,603],{},"you pay for the content, not the dimensions",[563,605,606,609],{},[15,607,608],{},"XLSX import"," — a streaming reader means memory tracks the cells that exist, not the sheet's declared size.",[563,611,612,615],{},[15,613,614],{},"Auto-fit"," — measurement covers the used range only. It never goes looking through a million empty rows.",[11,617,618,619],{},"Individually these are unglamorous. Together they are the difference between a benchmark number and an application that stays responsive. ",[15,620,621],{},"That consistency is what V5 spent its time on.",[55,623],{},[58,625,627],{"id":626},"side-by-side-with-the-other-libraries-same-file-same-machine","Side by side with the other libraries — same file, same machine",[11,629,630,631,406],{},"A number only means something next to another number. We measured V5 against the main open-source .NET spreadsheet libraries on the ",[15,632,633],{},"same machine, the same runtime and the same input file",[11,635,636],{},"The input xlsx is produced by a neutral generator that depends on none of the libraries under test — generating it with one of them would hand that library a file shaped exactly the way its own reader likes best. Values read back are checked against expectations at several positions, so a \"fast but empty\" result cannot take the top of the table.",[11,638,639],{},"Measured on AMD Ryzen 9 9900X / Windows 11 / .NET 10.0.10 / Workstation GC, median of 3 runs (August 25, 2026).\nInput: 200,000 rows × 10 columns (2,000,000 cells).",[127,641,642,658],{},[130,643,644],{},[133,645,646,649,652,655],{},[136,647,648],{},"Library",[136,650,651],{},"Holds",[136,653,654],{"align":141},"Read time",[136,656,657],{"align":141},"Retained memory",[150,659,660,679,692,705,718,731,744],{},[133,661,662,666,669,674],{},[155,663,664],{},[15,665,17],{},[155,667,668],{},"Cell model",[155,670,671],{"align":141},[15,672,673],{},"1.9 s",[155,675,676],{"align":141},[15,677,678],{},"129 MB",[133,680,681,684,686,689],{},[155,682,683],{},"ReoGrid V4",[155,685,668],{},[155,687,688],{"align":141},"2.7 s",[155,690,691],{"align":141},"521 MB",[133,693,694,697,699,702],{},[155,695,696],{},"NPOI 2.7.4 (XSSF)",[155,698,668],{},[155,700,701],{"align":141},"4.3 s",[155,703,704],{"align":141},"631 MB",[133,706,707,710,712,715],{},[155,708,709],{},"ClosedXML 0.105",[155,711,668],{},[155,713,714],{"align":141},"3.6 s",[155,716,717],{"align":141},"165 MB",[133,719,720,723,725,728],{},[155,721,722],{},"EPPlus 4.5.3.3",[155,724,668],{},[155,726,727],{"align":141},"1.8 s",[155,729,730],{"align":141},"168 MB",[133,732,733,736,738,741],{},[155,734,735],{},"NanoXLSX 2.5",[155,737,668],{},[155,739,740],{"align":141},"11.8 s",[155,742,743],{"align":141},"281 MB",[133,745,746,749,752,755],{},[155,747,748],{},"MiniExcel 1.41",[155,750,751],{},"Streaming",[155,753,754],{"align":141},"2.0 s",[155,756,757],{"align":141},"89 MB",[11,759,760],{},[15,761,762],{},"Among the libraries that hold an addressable cell model, V5 is lowest on both read time and retained memory.",[11,764,765,766,769],{},"Two things deserve stating plainly. EPPlus 4.5 is level on time (1.8 s), though it retains about 1.3× the memory. MiniExcel retains the least at 89 MB, but it is a ",[15,767,768],{},"streaming row reader",": it yields rows and forgets them, so nothing is addressable afterwards. It is a different kind of product, not a like-for-like comparison.",[11,771,772,773,777,778,781,782,785],{},"We also measured what happens ",[774,775,776],"em",{},"after"," the file is open. Across ",[15,779,780],{},"10,000 random cell reads",", V5 is fastest at ",[15,783,784],{},"0.3 µs per read"," (V4 0.5, ClosedXML 0.6, NanoXLSX 0.9, NPOI 1.1, EPPlus 1.5). Opening a file quickly and using it quickly afterwards are separate problems. V5 takes both.",[11,787,788],{},"Commercial grid products are deliberately absent: their licence agreements typically forbid publishing benchmark results. Every library above is open source, with no such restriction.",[55,790],{},[58,792,794],{"id":793},"completeness-competing-on-excels-own-terms","Completeness — competing on Excel's own terms",[11,796,797],{},"Scale and feature depth are often traded against each other. V5 gave up neither; everything below composes with the virtualization described above.",[11,799,800,803,804,808,809,812],{},[15,801,802],{},"Formula engine","\nAround 85 functions, dependency-ordered recalculation (Kahn's algorithm), and reference shifting that follows row and column insertion and deletion. Cross-sheet references such as ",[805,806,807],"code",{},"=Sheet2!A1"," and ",[805,810,811],{},"'My Sheet'!A1:B2"," are supported, as are defined names (named ranges) at both workbook and sheet scope.",[11,814,815,818,819,822],{},[15,816,817],{},"Formatting","\nA number-format engine that reads Excel's own format codes, including sections, conditions and colours. Conditional formatting is the full OOXML set — cell value, formula, text match, colour scales (two and three colour), data bars, top/bottom, above/below average, duplicate and unique, and ",[15,820,821],{},"icon sets (arrows, flags, traffic lights, ratings, stars — every standard set)"," — all of it round-tripping through XLSX.",[11,824,825,828],{},[15,826,827],{},"What real work needs","\nUndo/redo, multi-key sorting, auto-filter including condition filters, data validation, sheet protection with per-cell locking, cell notes, auto-fill, text rotation, indentation and vertical text, frozen panes, outlining, and zoom from 10% to 400%.",[11,830,831,834,835,808,838,841,842,845],{},[15,832,833],{},"Printing and export","\nPaper sizes from A5 to A3 plus B5, B4, Letter, Legal, Tabloid and Executive; margins, scaling, fit-to-page, repeated print titles, and headers and footers using Excel's ",[805,836,837],{},"&P",[805,839,840],{},"&D"," codes. Screen, printer and PDF all share ",[15,843,844],{},"one pagination engine",", so the preview, the printout and the PDF agree.",[11,847,848,851,852,855],{},[15,849,850],{},"I/O","\nXLSX (no external dependencies, streaming reader), PDF (no external dependencies, with Japanese fonts embedded so ",[15,853,854],{},"the output stays searchable and copyable","), reogrid-json (byte-compatible with ReoGrid Web), and CSV.",[11,857,858,859,862],{},"Backing all of this, the core ships with ",[15,860,861],{},"940 automated tests"," kept green.",[55,864],{},[58,866,868],{"id":867},"ease-of-adoption-is-a-design-requirement-too","Ease of adoption is a design requirement too",[560,870,871,881,890,896],{},[563,872,873,876,877,880],{},[15,874,875],{},"One package, one DLL, zero NuGet dependencies."," Core, I/O and UI arrive in a single self-contained assembly you add with one reference. (The Avalonia package is the sole exception: it references ",[805,878,879],{},"Avalonia",", because the control must bind against your copy.)",[563,882,883,886,887,406],{},[15,884,885],{},"Three platforms: WinForms, WPF and Avalonia."," Avalonia support means the same code runs on ",[15,888,889],{},"Windows, macOS and Linux",[563,891,892,895],{},[15,893,894],{},"A headless, UI-independent build"," is available. Reading XLSX and producing PDF on a server needs no window.",[563,897,898,899,406],{},"Runtime requirement: ",[15,900,901],{},".NET 10 or later",[127,903,904,914],{},[130,905,906],{},[133,907,908,911],{},[136,909,910],{},"Package",[136,912,913],{},"Target",[150,915,916,926,936,946],{},[133,917,918,923],{},[155,919,920],{},[805,921,922],{},"unvell.ReoGrid.One",[155,924,925],{},"WinForms",[133,927,928,933],{},[155,929,930],{},[805,931,932],{},"unvell.ReoGrid.One.Wpf",[155,934,935],{},"WPF",[133,937,938,943],{},[155,939,940],{},[805,941,942],{},"unvell.ReoGrid.One.Avalonia",[155,944,945],{},"Avalonia (Windows / macOS / Linux)",[133,947,948,953],{},[155,949,950],{},[805,951,952],{},"unvell.ReoGrid.One.Core",[155,954,955],{},"Headless (no UI)",[55,957],{},[58,959,961],{"id":960},"licensing-one-key-every-version-every-platform","Licensing — one key, every version, every platform",[11,963,964,965,968],{},"V5 ships as ",[15,966,967],{},"ReoGrid® One",", on deliberately simple terms.",[560,970,971,977,983,989],{},[563,972,973,976],{},[15,974,975],{},"A perpetual licence bought once, plus an optional annual renewal."," Not a subscription.",[563,978,979,982],{},[15,980,981],{},"Version-independent and platform-independent."," A key issued for V4 activates V5 unchanged; no reissue is needed. One licence covers WinForms, WPF, Avalonia and headless use.",[563,984,985,988],{},[15,986,987],{},"There is no kill switch."," If you stop renewing, the binaries you hold keep running forever and you may continue shipping applications built with them. What lapses is access to newer builds and official support — nothing else.",[563,990,991,994],{},[15,992,993],{},"Royalty-free runtime."," Your end users need no licence of their own.",[11,996,997],{},"When a component is embedded in systems that run for a decade, a design where \"stop paying and shipped software stops working\" is not one we will adopt. That will not change.",[11,999,1000,1001,1004],{},"Without a licence applied, the grid still ",[15,1002,1003],{},"displays, scrolls, prints and exports"," — a watermark appears and editing is disabled. Evaluation is deliberately unobstructed, so you can start immediately.",[55,1006],{},[58,1008,1010],{"id":1009},"built-on-more-than-ten-years-of-production-use","Built on more than ten years of production use",[11,1012,1013,1014,1017,1018,1021],{},"Since its debut in 2014, ReoGrid has been adopted in projects across ",[15,1015,1016],{},"more than twelve countries",", including Japan, the United States and Germany, with over ",[15,1019,1020],{},"180,000 downloads"," through NuGet. It is in production in domains where reliability is paramount, financial systems among them.",[11,1023,1024,1025,1028],{},"Most of V5's design decisions did not come from theory. They came from ",[15,1026,1027],{},"a decade of specific reports from the field"," — \"loading a few hundred thousand rows stops responding\", \"pouring data into a template with conditional formatting freezes the UI\", \"formatting is lost when we open a file Excel produced\". Each of those shaped which structure V5 rebuilt and how.",[11,1030,1031,1032,406],{},"Full virtualization became the starting point not because it is fashionable, but because ",[15,1033,1034],{},"the places customers were actually getting stuck all traced back to the same root",[11,1036,1037,1040],{},[805,1038,1039],{},"ReoGrid"," is a registered trademark in Japan (Registration No. 7052809).",[55,1042],{},[58,1044,1046],{"id":1045},"for-customers-on-v4","For customers on V4",[11,1048,1049,1050,1053],{},"V5 breaks API compatibility, so ",[15,1051,1052],{},"V4 sales and maintenance are not ending."," There is no need to rush a migration.",[560,1055,1056,1063,1069],{},[563,1057,1058,1059,1062],{},"V4 and V5 ship as ",[15,1060,1061],{},"separate NuGet package IDs",". A version bump will never suddenly break an existing project's build.",[563,1064,1065,1068],{},[15,1066,1067],{},"Your contract stays the same."," A ReoGrid One licence covers both V4 and V5 at no additional cost.",[563,1070,1071],{},"Charts, drawing objects and multi-row column headers are outside V5's initial release. If you use them, stay on V4 — we will schedule them for V5 based on what customers ask for.",[55,1073],{},[58,1075,1077],{"id":1076},"try-it-on-your-own-data","Try it on your own data",[11,1079,1080,1081,1084],{},"Performance is best confirmed on your workload rather than on someone else's chart. ",[15,1082,1083],{},"The evaluation build runs without a licence",", so load your heaviest workbook and scroll through it.",[560,1086,1087,1096,1103,1110,1117],{},[563,1088,1089],{},[1090,1091,1095],"a",{"href":1092,"rel":1093},"https://reogrid.net",[1094],"nofollow","ReoGrid official site",[563,1097,1098],{},[1090,1099,1102],{"href":1100,"rel":1101},"https://reogrid.net/download",[1094],"Download",[563,1104,1105],{},[1090,1106,1109],{"href":1107,"rel":1108},"https://reogrid.net/pricing",[1094],"Pricing and licensing",[563,1111,1112],{},[1090,1113,1116],{"href":1114,"rel":1115},"https://reogrid.net/release-notes",[1094],"Release notes",[563,1118,1119],{},[1090,1120,1123],{"href":1121,"rel":1122},"https://reogrid.net/contact",[1094],"Contact us",[11,1125,1126],{},"We are glad to help with evaluation on representative data sets, or to advise on migrating an existing V4 project. Please get in touch.",{"title":1128,"searchDepth":1129,"depth":1129,"links":1130},"",2,[1131,1132,1133,1137,1140,1141,1142,1143,1144,1145,1146,1147],{"id":60,"depth":1129,"text":61},{"id":85,"depth":1129,"text":86},{"id":111,"depth":1129,"text":112,"children":1134},[1135],{"id":221,"depth":1136,"text":222},3,{"id":388,"depth":1129,"text":389,"children":1138},[1139],{"id":478,"depth":1136,"text":479},{"id":554,"depth":1129,"text":555},{"id":626,"depth":1129,"text":627},{"id":793,"depth":1129,"text":794},{"id":867,"depth":1129,"text":868},{"id":960,"depth":1129,"text":961},{"id":1009,"depth":1129,"text":1010},{"id":1045,"depth":1129,"text":1046},{"id":1076,"depth":1129,"text":1077},"2026-08-25","ReoGrid V5 is here — a next generation rebuilt from the core rather than an extension of V4. Full virtualization sits on line one of the design instead of arriving as a late optimization, so a sheet takes the same ~6.5 ms to paint a frame whether it holds a hundred thousand rows or a million. What sets the workload is the range you can see, not the volume of data behind it.","md",{},true,"/blog/en/reogrid-v5-release",{"title":1155,"description":1156},"ReoGrid V5 Released — A .NET Spreadsheet Component Built for Very Large Data","ReoGrid V5 puts full virtualization on line one of the design. A frame costs the same ~6.5 ms at a hundred thousand rows and at a million, the viewport read takes 30.4 µs and allocates zero bytes, and a 16–23 byte cell drives the cost of memory management itself to the floor. WinForms, WPF and Avalonia; a single dependency-free DLL; perpetual licensing.","blog/en/reogrid-v5-release",[1159,1160,1161,1162,1163],"reogrid","spreadsheet",".net","performance","release","/images/articles/reogrid-v5-announcement.jpg","_BojM6On-qZT7FbQxARALtlRyuk4rQcWdXjYUjjqdQU",1787643915391]