字节数组到内存流的优化方法

时间:2018-07-20 14:16:10

标签: c# .net spreadsheetgear

我使用以下代码行

byte[] byteInfo = workbook.SaveToMemory(FileFormat.OpenXMLWorkbookMacroEnabled);
workStream.Write(byteInfo, 0, byteInfo.Length);
workStream.Position = 0;
return workStream;

借助C#和Spreadsheetagear从浏览器下载excel文件。

它适用于较少的记录,但是当我尝试下载包含大量数据的工作簿(具有50k行,1k列并启用了宏的excel)时,此行

byte[] byteInfo = workbook.SaveToMemory(FileFormat.OpenXMLWorkbookMacroEnabled);

一个人需要大约4-5分钟。是否有任何优化的方式来完成,因此下载大型文件只需要1到2分钟。

2 个答案:

答案 0 :(得分:0)

尝试

workbook.SaveToStream(outputstream, SpreadsheetGear.FileFormat.OpenXMLWorkbook);

流通常可以更快,因为它们通常可以节省与ram一样快的速度。而不是填写页面文件。

答案 1 :(得分:0)

对于大型工作簿,SpreadsheetGear进程运行所花费的时间与将工作簿打开到内存中所花费的时间有关,而不是与编译信息并下载它所花费的时间有关。您可以通过请求打开工作簿并发送简单的成功响应而无需下载字节数组来进行测试。大于1-2MB的电子表格文件开始使速度变慢,并且超过5MB的过程可能变得非常缓慢。

选项是:

  1. 创建一个空的电子表格并通过提取来构建内容 从数据库中插入到电子表格中以进行下载。 这比打开大型电子表格文件快。
  2. 摆脱不必要的内容,这些内容会占用空间并增加 电子表格
  3. 将电子表格拆分成较小的单个文件。您可以测试一下此速度,以比较处理10 x 1MB文件,2 x 5MB文件和1 x 10MB文件的速度
  4. 使用CSV导入/导出文件过程。 它们更快,但显然不如SpreadsheetGear聪明 功能
  5. 设置直接下载存储的电子表格文件的方式,而不是通过SpreadsheetGear。这样速度更快,但显然需要存储中有一个静态文件,或者由另一个进程创建并存储了一个静态文件