Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 分离读/写操作是否提高了程序效率?_Java_Algorithm_Performance_File Io_Data Structures - Fatal编程技术网

Java 分离读/写操作是否提高了程序效率?

Java 分离读/写操作是否提高了程序效率?,java,algorithm,performance,file-io,data-structures,Java,Algorithm,Performance,File Io,Data Structures,我已经为这个类编写了一个程序,它从URL接收数据,解析关键短语,然后将短语、行号和列号写入文本文件 目前,我将此作为一个单独的操作来执行,其中URL被馈送到BufferedReader进行读取,到扫描仪进行解析,然后进入一个循环,在该循环中,每一行都被梳理,并使用一系列条件语句来检查所述关键短语的存在。找到匹配项后,我将写入文件 读取的文件大约有60K行文本,从开始到完成整个操作平均需要4000ms。将任务分开,首先将文件读入数据结构,然后将结果输出到文件中,而不是同时执行这两项操作,这样会更有

我已经为这个类编写了一个程序,它从URL接收数据,解析关键短语,然后将短语、行号和列号写入文本文件

目前,我将此作为一个单独的操作来执行,其中URL被馈送到BufferedReader进行读取,到扫描仪进行解析,然后进入一个循环,在该循环中,每一行都被梳理,并使用一系列条件语句来检查所述关键短语的存在。找到匹配项后,我将写入文件

读取的文件大约有60K行文本,从开始到完成整个操作平均需要4000ms。将任务分开,首先将文件读入数据结构,然后将结果输出到文件中,而不是同时执行这两项操作,这样会更有效吗

此外,从URL中提取数据与在本地读取数据相比会产生多大的影响?我有两种选择,但我认为这取决于我的宽带速度


编辑:这是一个不错的测试用例。在过去的一周里,我们更换了ISP,并将宽带速度从6Mb/秒升级到30Mb/秒。这使我的平均读/解析/写时间降低到1500毫秒。有趣的是,看看微小的差异会对性能产生怎样的影响。

这取决于您在数据处理部分实现并行性的方式

此时,您依次读取所有内容—然后处理数据—然后写入数据。因此,即使您将其分为3个线程,每个线程都取决于前一个线程的结果

因此,除非您在完全接收数据之前就开始处理数据,否则这不会有什么区别,只会增加开销

您必须对生产者/消费者类流程进行建模,例如,单独读取行,然后将行放入工作队列进行处理。对于处理后的行也是如此,这些行随后被放入队列中写入文件

这将允许执行并行读/处理/写操作


顺便说一句,你可能主要受到从URL读取文件速度的限制,因为所有其他步骤都是在本地进行的,而且速度要快几个数量级。

分析你的代码。找到瓶颈4000毫秒的大部分时间可能都花在了算法上。因此,只要算法无法优化,你对网络和文件操作的处理就没有多大关系。不过,我宁愿先读入所有数据以释放网络资源(这样它们就不会被冗长的解析过程所束缚)。这可能没什么大不了的。你应该尽可能避免将整个文件或URL内容读入内存。它不会扩展并增加延迟。是的,我打算尝试几种不同的方法来更好地了解我会得到什么类型的性能结果。我想我应该先寻求一些更有经验的建议,这样我才能更好地理解我的发现。谢谢你这样深思熟虑的回答。这可能是一个很小的问题,但这对我来说是一个新领域,因为我的CS程序终于开始钻研真正的理论。我当时正在做的作业只是暑期课程的第一个作业,我想这将有助于激发辩论,推动课堂进步。然而之前,我在WebDev中完成了一个AS,并满足了我的Uni传输要求,与我现在正在处理的问题相比,回想起来感觉非常机械。我想随着时间的推移,我会更多地参与其中。