We are evaluating Aspose.Excel to generate large files (say 100,000 rows). I get a dataset from the database and then iterate through the rows and columns and write out data using Cell.PutValue. I also modify Style of some cells to change the background color within the same loop. The problem is that this process consumes so much memory that the server runs out of it. The first 10,000 records are fine, but then things tend to deteriorate fast. I tried this logic in both windows and web scenarios with the same result. Originally, I was running a version 2.5 of Aspose.Excel, but then upgraded to the latest, 2.7.5. This upgrade helped a little in terms of memory utilization, but the problem is still there. The actual Excel file that we are writing out would take about 25-30MB on disk. Memory utilized by this process, however, would be in the neighborhood of 700MB and more. Do you have a comment or suggestion on how to remedy the situation?
Thanks.
Could you tell me how many cells’ background color are changed at run time?
If you use the following code to set a cell style:
cell.Style.ForegroundColor = Color.Blue;
it did consume memory much if you set many many cells’ style because each cell will create a new Style object.
You can try this to minimize memory consuming:
1. If you want to set a whole row or a whole column backgound color, you can try this:
Row row = cells.Rows[1];
row.Style.ForegroundColor = Color.Blue;
Column column = cells.Columns[2];
column.Style.ForegroundColor = Color.Blue;
2. If there are many cells with same style setting, you can try this:
Style style = excel.Styles[excel.Styles.Add()];
style.ForegroundColor = Color.Blue;
for(int i = 0; i < 10; i ++)
{
for(int j = 0; j < 10; j ++)
cells[i,j].Style = style;
}
[1] Alter the 35 header cells with the following code...
int styleIndex = excel.Styles.Add();
Style style = excel.Styles[styleIndex];
style.ForegroundColor = System.Drawing.Color.Navy;
style.Font.Color = System.Drawing.Color.White;
style.Font.IsBold = true;
style.Borders.SetStyle(CellBorderType.Thin);
style.Borders.DiagonalStyle = CellBorderType.None;
cell.Style.Borders.SetStyle(CellBorderType.Thin);
cell.Style.Borders.DiagonalStyle = CellBorderType.None;
sht.Cells[r, 0].Style.ForegroundColor = System.Drawing.Color.Gray;
Project Leader - Software Engineering
UCC Direct Services, a Wolters Kluwer Company
Dear Che' Smith,
25-30MB excel file is really too large, especially with many styles. When you use MS Excel to open such a file, you can also find it consuming about 600MB memory.
And could you tell me how many cells in [2] and [3]?
In [2], you can also try this:
int styleIndex = excel.Styles.Add();
Style style = excel.Styles[styleIndex];
style.Borders.SetStyle(CellBorderType.Thin);
style.Borders.DiagonalStyle = CellBorderType.None;
cell.Style = style;
And if possible, please send me your full code, then I can find how to optimize it both in Aspose.Excel and your program.
Thank you very much.
Laurence,
The phrase “too large” is entirely subjective. We deal in 25-30+ MB Excel files on a daily basis, both receiving from our customers and sending to them. I just loaded a 34 MB file into Excel (2003), and found that I could not get memory consumption to go over 130 MB - I went to each tab, paged through all rows, etc. We have dealt in a good number of larger files, and have never had a problem. I understand the situation is different when trying to generate these files through a component such as Aspose.Excel, since Excel does various paging techniques; but, perhaps you can give advice on how to accomplish such paging through Aspose.Excel.
The number of cells in [2] and [3] will vary. [2] is 35 cells per row (to match the number of headers I mentioned). [3] will be anywhere from zero to two per row. We will encounter situations where only a few thousand rows are necessary, and others where we’ll have 10’s of thousands (split across multiple worksheets).
Please post the email address we should send our code to and we will send it as soon as possible. In the interim, we will try using a created style object rather than altering the styles on each individual cell.
Thanks much,
Project Leader - Software Engineering
UCC Direct Services, a Wolters Kluwer Company
Please send you code to excel@aspose.com. And if possible, please zip your generated file and also send it to me. I will check them right now.