![]() |
1
3
在您的情况下,多线程不会有太多帮助,因为问题是I/O绑定的,而不是CPU绑定的(好吧,除非您尝试在内存中对文本文件进行大量处理,然后将其写回)。如果问题是读取文件,通常100 MB是大型系统可以处理的。如果这是文件的大小,并且您在一台UNIX机器上运行,请查看您是否可以在64位VM下运行代码。当然,这并不是一个永久的解决方案。 一个可扩展的解决方案是,您可以一行一行地读取文件,只保留您想要的数据,最后只处理这些数据(假设您可以进行离线处理)。小鲍比表的方法是一个很好的方法,因为它给你一个恒定的处理时间(实际上是O(N),其中N是要处理的行数)。 |
![]() |
2
3
我会查一下 Grep NIO Example 作为起点。 |
![]() |
3
2
如果文件非常大,并且您希望将其作为一个整体进行处理(而不仅仅是grep文件,或者进行逐行处理),那么就有可能耗尽RAM内存(或者至少会导致内存混乱)。 一个更健壮的解决方案是按行分析文件,将其存储到磁盘上的一些随机访问应用程序(数据库)中,然后使用该应用程序进行处理。 由于您使用了磁盘,它将减慢您的处理速度,但它将确保性能级别保持不变,而不管文件大小如何。 |
![]() |
4
1
Hadoop非常适合: http://hadoop.apache.org/ -它将处理线程,分发到不同的机器,在文本输入等方面具有很多功能。map reduce范式有点不同,但肯定要考虑到这一点。 |
![]() |
5
1
我最近写了一个日志分析器,有300m以上的日志文件。 我使用Apache Commons IO LineIterator 表现良好的班级(20秒)
为了减少IO,您不需要先解压缩文件,但使用
|
![]() |
6
0
根据您的需要,最有效的解决方案可能是启动一个设计用于完成这类工作的外部程序,比如Perl、grep或awk,然后告诉它要做什么,然后对结果进行后处理。 |
![]() |
Mr. Kisus · 如何删除数字对中的第二个数字 2 年前 |
![]() |
Prince · 复制大型文件需要更多时间 2 年前 |
![]() |
altern · 输出haskell对象,忽略“show”声明 6 年前 |
![]() |
supermeerkat · 嵌套并行。For()循环和文件创建问题 6 年前 |
![]() |
Arka Pal · 关闭管道中未使用的端部 6 年前 |
|
Marta · 重命名提取文件的文件夹 6 年前 |
![]() |
Sean2148 · 如何在Java 8中使用CSV值作为构造函数参数 6 年前 |
![]() |
youR.Fate · 在c中向fstream写入二进制数据++ 6 年前 |
![]() |
Jon Lauridsen · 等待放在哪里? 7 年前 |