Что быстрее read (), readline () или readlines () относительно файла io в julia? - PullRequest
0 голосов
/ 09 мая 2019

Пожалуйста, исправьте меня, если я ошибся:

read эффективен, так как я предполагаю:

a) read извлекает все содержимое файла в память за один раз, аналогичнов python.

b) readline и readlines переносит одну строку за раз в память.

1 Ответ

1 голос
/ 10 мая 2019

Для более подробного описания комментария приведен пример теста (дополнительно показывающий, как вы можете выполнять такие тесты самостоятельно).

Сначала создайте несколько случайных тестовых данных:

open("testdata.txt", "w") do f
    for i in 1:10^6
        println(f, "a"^100)
    end
end

Мы хотим прочитать данные четырьмя способами (и рассчитать общую длину строк):

f1() = sum(length(l) for l in readlines("testdata.txt"))

f2() = sum(length(l) for l in eachline("testdata.txt"))

function f3()
    s = 0
    open("testdata.txt") do f
        while !eof(f)
            s += length(readline(f))
        end
    end
    s
end

function f4()
    s = 0
    for c in read("testdata.txt", String)
        s += c != '\n' # assume Linux for simplicity
    end
    s
end

Теперь мы сравним производительность и использование памяти данными опциями:

julia> using BenchmarkTools

julia> @btime f1()
  239.857 ms (2001558 allocations: 146.59 MiB)
100000000

julia> @btime f2()
  179.480 ms (2001539 allocations: 137.59 MiB)
100000000

julia> @btime f3()
  189.643 ms (2001533 allocations: 137.59 MiB)
100000000

julia> @btime f4()
  158.055 ms (13 allocations: 96.32 MiB)
100000000

Если вы запустите его на своем компьютере, вы должны получить аналогичные результаты.

...