В Юлии, Как вы удаляете файл после создания его для отображения в памяти? - PullRequest
1 голос
/ 16 апреля 2019

Я пытаюсь работать с большими структурами данных, которые хранят больше, чем может обработать оперативная память, и мне пришлось использовать mmap - это результат.

Все это работает, как и ожидалось, однако в концеcode Я хотел бы удалить этот временный файл, так как он больше не используется.

Я пытался использовать rm для удаления файла или удаления его вручную во время работы файла, но у меня нет разрешениячтобы сделать это.

Вот так выглядит мой код.


using Mmap

io = open("example.tmp", "w+")
v = Mmap.mmap(io,Vector{Int64},Int64(1e9))
close(io)

#Perform some actions on vector v

#attempt to delete here, rm("example.tmp") returns an EACCES error though

Я хочу, чтобы этот файл .tmp мог автоматически удаляться, когда он больше не используется, как бы яидти делать это?

1 Ответ

1 голос
/ 16 апреля 2019
using Mmap

io = open("example.tmp", "w+")
v = Mmap.mmap(io,Vector{Int64},Int64(1e9))
close(io)

#Perform some actions on vector v

v = nothing # delete reference to memory mapped data
GC.gc() # call garbage collector to be safe

rm("example.tmp") # should work now

Пока есть ссылка на отображенные в памяти данные, вы можете столкнуться с проблемами прав доступа.В конце концов, вы все еще можете использовать v.Попробуйте удалить / перезаписать любую ссылку на данные, установив v = nothing и вызвав GC впоследствии.

...