Sneak peek: improving the performance and memory footprint of Excel and PDF export from WinForms grid (coming in v2011.1)

ctodx
05 April 2011

Through valuable customer feedback and our own testing, we realized that our exporting engine wasn’t all it was cracked up to be, especially with regard to raw performance and memory usage. The call went out: increase the performance, and, at the same time, reduce the amount of memory used. I’ve now received the results of our benchmark and it’s time to reveal all.

photo © 2008 Nathan | more info (via: Wylio)What we used. The latest version of DXperience v2010.2 and the current internal alpha build for DXperience v2011.1.

What we timed/measured. We used 4 benchmarks:

  1. XtraGrid with 50,000 records and 5 columns (1 integer, 1 date, 1 text, 1 float, 1 checkbox). A quarter of a million cells.
  2. XtraGrid with 100,000 records and 5 columns (1 integer, 1 date, 1 text, 1 float, 1 checkbox). Half a million cells.
  3. XtraGrid with 50,000 records and 20 columns (1 integer, 1 checkbox, 18 text with random contents, between 8 and 10 chars). A million cells.
  4. XtraGrid with 100,000 records and 20 columns (1 integer, 1 checkbox, 18 text with random contents, between 8 and 10 chars). Two million cells.

The platform. Reasonably standard developer box running Windows 7, 64-bit. (32-bit can’t process this amount of data.)

The results.

  v2010.2 v2011.1 % change
  Mem (MB) Time (sec) Mem (MB) Time (sec) Memory Time
50k rows * 5 cols
xls 540 126 117 7.5 -78% -94%
xlsx 743 152 146 8.2 -80% -95%
pdf 485 162 40 37.0 -92% -77%
preview 480 122 32 4.9 -93% -96%
100k rows * 5 cols
xls - - - - - -
xlsx 2416 741 206 16 -99% -98%
pdf 963 573 80 73 -92% -87%
preview 956 447 65 9 -93% -98%
50k rows * 20 cols
xls 3016 637 476 28 -84% -96%
xlsx 6073 2721 595 35 -90% -99%
pdf   >3000 163 128   HUGE
preview 2848 610 130 17 -95% -97%
100k rows * 20 cols
xls - - - - - -
xlsx   >3000 997 74   HUGE
pdf   >3000 316 264   HUGE
preview
>3000 265 32
HUGE

Notes: OK, so we got bored on some of the tests with DXperience v2010.2. We basically abandoned the test if it took more than 50 minutes (3000 seconds). To be honest, we have better things to do. So where it says HUGE, assume it means the percentage change was between –99% and –99.9999%.

Together with these performance and memory improvements, we’ve made some small UI changes:

  • We’ve added the ability to show progress for export/print/preview:

    ExportProgress
  • It also has the ability to provide a Cancel button to halt the process:

    ExportProgressCancel
  • For the new Instant Feedback UI, we’ve added a marquee progress bar for when the grid is loading data from the server:

    LoadingMarquee

We’ve also made some changes to help with exporting to Excel. Selected editors (CheckEdit, ImageComboBoxEdit, ColorEdit) will now export a textual representation rather than an image, as before. So for example, in v2010.2 and earlier, if you exported the contents of a CheckEdit column, you would get this:

CurrentExportCheckbox

Where the cells are images. Actually that’s not quite right, there was an issue where, if you deleted the column, the images would remain (wacky but true):

CurrentExportCheckboxError 

Anyway, forget all that because from v2011.1 onwards, you will get this:

NewExportCheckbox

Stay tuned for more WinForms news in DXperience v2011.1.

Free DevExpress Products – Get Your Copy Today

The following free DevExpress product offers remain available. Should you have any questions about the free offers below, please submit a ticket via the DevExpress Support Center at your convenience. We’ll be happy to follow-up.
Eric McS
Eric McS

Nice work!  Any chance of getting "Unchecked" and "Checked" changed to "True" and "False"?

5 April 2011
Christopher Todd
Christopher Todd

Would be nice to specify whether to use actual value or textual representation (on a per column basis). What drives me nuts is I would rather see raw values than what is shown on report most times. We have engineers who like to export to excel and apply their calculations and formulas against the raw data.

Chris.

5 April 2011
Robert Fuchs
Robert Fuchs

So why Unchecked/Checked instead of True/False?

Can it be changed?

Can it be localized?

5 April 2011
Crono
Crono

Wow, that is fantastic! :D

@Robert:

I'm pretty sure these corresponds to the checkedit's DisplayValueChecked/Unchecked/Grayed values.

5 April 2011
CESAR F. QüEB
CESAR F. QüEB

@Crono,

The suggestion from Robert is very important. Maybe the value must be configurable, i.e: Use logical value (true/false/) or use bits (1/0).

5 April 2011
Steven Rasmussen
Steven Rasmussen

All i've got to say is 'Wow'!  Either the exporting engine was terrible before, or you guys are just awesome!  I think it's probably a little of both :) maybe more of the pure awesomeness though.  Keep up the great work!  I'm getting really excited for this upcoming release.

6 April 2011
James Zhong
James Zhong

Good performance improvements!

6 April 2011
Onur Tekin
Onur Tekin

Can we expect the same performans improvement from PivotGrid export ?

6 April 2011
Guido Volkmann
Guido Volkmann

Please!!!!! Let that the gridvalues on booleans localizeable or changeable!

6 April 2011
Sigol
Sigol

That's massive. Great work. Will have a huge impact on our product.

6 April 2011
Thomas Petersen
Thomas Petersen

Funny this, i tried to the same tests but weather i did it on a PC with 6 or 8 GB memory available the App crashed,

38000 rows*28 Columns. But not with data in all of them.

Only 8 columns with data

6 April 2011
Rob Klamka
Jim

Most excellent - I look forward to the performance improvement.

I am also not going to quibble about the change to the boolean output to Excel as checked/unchecked. A simple macro will make short work of that little problem - getting rid of the image is a big deal to me - that little feature has always been a pain in my *ss.

6 April 2011
Bert Stomphorst
Bert Stomphorst

Really nice work!

Does the same performance improvement affect the pivotgrid?

6 April 2011
Ron Birk
Ron Birk

Will this affect the webforms export in any way too?

6 April 2011
Onesoft
Onesoft

Awesome work... Lokking forward oto the release.

Please do reconsider Checked/Unchecked!!! Definetely I preferred the image to be honest.

7 April 2011
Rob Simmons
Rob Simmons

Very nice all around.  To get in my 2 cents about checked/unchecked, it would be nice to have configurable text values for them (by column) as most of our end users would likely prefer yes/no, and obviously there are other options that may make more sense to the end user based on what the column represents (any X/NotX combo).

7 April 2011
Mike Falcon (DevExpress)
Mike Falcon (DevExpress)

For checked/unchecked - you can use our localization engine or RepositoryItemCheckEdit.DisplayValue(Checked/Unchecked) properties.

7 April 2011
Chris Danielson
Igor Maksymenko

Any ideas of when 2011 will be released ? I am really tired explaining customers why they wait hours to load their reports to see "Out of memory" exception.

28 April 2011
Bryce Avallone
Bryce Avallone

Does this change improve just the Grid or all of the component excel exports (Tree, VGrid, Pivot, etc)

1 June 2011
LUCIANO REZENDE
LUCIANO REZENDE

Has this implementation applicable to .asp .net

22 May 2012

Please login or register to post comments.