#ruby #performance #file #file-io
#ruby #Производительность #файл #file-io
Вопрос:
Я пытаюсь обойти медленную реализацию File.each_line в Ruby.
def parse
@file = File.open(@file)
@filesize = @file.stat.size
@buffer_size = 10485
@offset = @buffer_size
@counter = 0
@line_counter = 0
@file.seek(0, File::SEEK_END)
while @file.tell > 0
@file.seek(-@offset, File::SEEK_END)
buffer = @file.read(@buffer_size)
buffer_line = buffer.split("n")[1]
@counter = 1
puts @counter
@offset = @buffer_size
return if @offset > @filesize
end
end
Я не уверен, как я мог бы реализовать буфер, в котором я мог бы хранить оставшуюся часть каждой строки.
Ответ №1:
Аналогичная проблема обсуждалась в списке рассылки ruby-talk. Поток называется быстрым способом обработки больших файлов построчно.
Комментарии:
1. Я не вижу, что там был дан ответ.
2. В blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/225227 , посмотрите на внешний вид, начиная с
while((buf2 = f.read @bufsize))
. Это мини-реализация того, чего вы пытаетесь достичь. `