【发布时间】:2015-06-07 23:41:19
【问题描述】:
我已经为类编写了一个程序,它从 URL 中获取数据,解析它的关键短语,然后将短语、行号和列号写入文本文件。
目前我将其作为单个操作执行,其中 URL 被馈送到 BufferedReader 进行读取,馈送到 Scanner 进行解析,然后进入一个循环,其中每一行都被梳理并使用一系列条件语句来检查所述关键短语的存在。当找到匹配项时,我会写入文件。
读取的文件大约有 60K 行文本,从开始到结束运行此完整操作平均需要大约 4000 毫秒。拆分任务并首先将文件读入数据结构,然后将结果输出到文件而不是同时执行这两个操作会更有效吗?
另外,从 URL 中提取数据与在本地读取数据相比有多大影响?我可以选择两者都做,但我认为这取决于我的宽带速度。
编辑:有点不错的测试用例。过去一周,我们更换了 ISP 并将我们的宽带速度从 6Mb/sec 升级到 30Mb/sec。这使我的平均读取/解析/写入时间降至 1500 毫秒。有趣的是,小差异会对性能产生如此影响。
【问题讨论】:
-
分析您的代码。找到瓶颈
-
4000 毫秒的大部分时间可能都花在了算法上。因此,只要算法无法优化,您对网络和文件操作的操作并不重要。不过,我宁愿先读入所有数据以释放网络资源(这样它们就不会被冗长的解析过程所束缚)。可能没什么大不了的。
-
您应该尽可能避免将整个文件或 URL 内容读入内存。它不会扩展并增加延迟。
-
是的,我打算尝试几种不同的方法来更好地了解我会得到什么类型的性能结果。我想我会先寻求一些更有经验的建议,这样我才能更好地理解我的发现。
标签: java algorithm performance file-io data-structures