首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字节数组到内存流的优化方法

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

Stack Overflow用户
提问于 2018-07-20 22:16:10
回答 2查看 609关注 0票数 0

我使用以下几行代码

代码语言:javascript
复制
byte[] byteInfo = workbook.SaveToMemory(FileFormat.OpenXMLWorkbookMacroEnabled);
workStream.Write(byteInfo, 0, byteInfo.Length);
workStream.Position = 0;
return workStream;

在C#和Spreadsheetagear的帮助下,从浏览器下载excel文件。

它适用于较少的记录,但当我尝试下载一个包含大量数据的工作簿(一个具有50k行、1k列和启用宏的excel )时,下面这行代码

代码语言:javascript
复制
byte[] byteInfo = workbook.SaveToMemory(FileFormat.OpenXMLWorkbookMacroEnabled);

仅此一项就需要近4-5分钟。有没有什么优化的方法可以让下载大文件只需要1到2分钟?

EN

回答 2

Stack Overflow用户

发布于 2018-07-21 00:56:15

试一试

代码语言:javascript
复制
workbook.SaveToStream(outputstream, SpreadsheetGear.FileFormat.OpenXMLWorkbook);

流通常可以更快,因为它们通常保存得与ram将占用的一样快。而不是填满页面文件。

票数 0
EN

Stack Overflow用户

发布于 2018-07-22 06:48:19

对于大型工作簿,运行SpreadsheetGear进程所用的时间与将工作簿打开到内存中所用的时间有关,而不是与编译信息和下载信息所用的时间有关。您可以通过请求打开工作簿并发送一个不带下载的字节数组的简单成功响应来测试这一点。大小超过1-2MB的电子表格文件开始变慢,超过5MB的过程会变得非常慢。

选项包括:

  1. 创建一个空的电子表格,并通过从数据库中提取内容并将其插入到电子表格中以供下载来构建内容。这比打开一个大的电子表格文件更快。
  2. 去掉了占用空间的不重要的内容,并增加了电子表格的大小。
  3. 将电子表格拆分为较小的单个文件。您可以通过比较处理10 x 1MB文件、2 x 5MB文件和1 x 10MB文件的速度来测试这一点。
  4. 使用CSV导入/导出文件处理。它们更快,但显然不如functionality
  5. Set直接下载存储的电子表格文件,而不是通过SpreadsheetGear的SpreadsheetGear那么智能。这样做速度更快,但显然需要存储中的静态文件或由另一个process

创建并存储的文件

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51444555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档