首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >工作簿的创建需要很长时间

工作簿的创建需要很长时间
EN

Stack Overflow用户
提问于 2014-04-27 23:08:48
回答 2查看 3.8K关注 0票数 4

我注意到使用ApachePOIV3.10为xlsx文件创建工作簿语句,例如

代码语言:javascript
运行
复制
Workbook wb = WorkbookFactory.create(inputStream) 

代码语言:javascript
运行
复制
Workbook wb = new XSSFWorkbook(inputStream)

...is耗时很长(~30秒),文件只有72行,10列(365 10)。

这不是问题,但似乎有点过火了。我在想我是做错了什么还是没做我该做的事。用相同的数据(但只有25 an )实例化xls文件只需1或2秒。如果这是正常的话,能不能让我知道。

编辑:

这是我使用的工作簿创建代码:

代码语言:javascript
运行
复制
LOG.info("Loading Excel Workbook...");
Workbook workbook;
try {
    workbook = WorkbookFactory.create(dataStream);
} catch (InvalidFormatException e) {
    throw new IOException("Invalid file format ==> " + e.getMessage());
}
LOG.info("Workbook loaded.");

明确一点,dataStream是一个InputStream。30秒延迟发生在第一和第二日志语句之间。正如我之前说过的,我尝试用new XSSFWorkbook(dataStream)替换工厂,但是延迟仍然存在。

编辑-2

我运行了一个独立测试,除了使用1)一个File进行工作簿初始化之外什么也不做,还有一个InputStream,它的源代码是我遇到问题的xlsx文件。他们都在大约2秒内完成了。

我应该早点加些背景的。我在使用谷歌应用引擎。我提供给POI的输入流是从上传到服务器的文件中检索的。Apache不支持Servlet3.0(用于处理文件上传),因此我必须使用检索文件数据。最终,我得到的数据是从InputStream检索的FileItemStream#openStream()。这就是我提供给战俘的东西。

所以,我不知道这是否是App的问题,或者POI不喜欢InputStream返回的FileItemStream风格。顺便说一句,我不能尝试使用File而不是InputStream进行初始化,因为App不允许写入文件系统。

EN

回答 2

Stack Overflow用户

发布于 2017-07-13 12:49:37

我会用一个可用的分析工具做一些分析,例如JVisualVM,Dynatrace,JProfiler,。

只有这样,您才能确切地知道代码中的时间是在哪里度过的,毕竟,这可能是一个意想不到的地方,您会在这里追逐错误的马。

也就是说,您可能从其他地方接收到InputStream,它可能实际上是通过互联网从某些外部内容下载的,而且它的速度可能很慢,因此所有的阅读都需要很长时间。或者可能是磁盘设置或内存短缺,其中许多GC正在运行,因为您已接近极限,.

另一种选择是提取尽可能小的代码片段,以复制此代码段,然后您可以看到需要删除哪些内容才能使其运行得更快。

票数 1
EN

Stack Overflow用户

发布于 2017-07-13 02:31:57

使用csv格式代替。我们在使用POI库时遇到了同样的问题,我们现在正在下载csv文件,而不是excel文件,该文件非常轻巧,下载速度很快。

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

https://stackoverflow.com/questions/23330156

复制
相关文章

相似问题

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