gpt4 book ai didi

ruby - 在 Ruby 中处理大量文件时变慢

转载 作者:数据小太阳 更新时间:2023-10-29 07:19:44 25 4
gpt4 key购买 nike

我正在尝试创建一个包含大约 64000 个对象的大型数组。这些对象是文件的截断 SHA256 摘要。

这些文件位于 256 个子目录(名为 00 - ff)中,每个子目录包含大约 256 个文件(每个文件略有不同)。每个文件的大小大约在 1.5KB 到 2KB 之间。

代码如下所示:

require 'digest'
require 'cfpropertylist'

A = Array.new

Dir.glob('files/**') do |dir|
puts "Processing dir #{dir}"
Dir.glob("#{dir}/*.bin") do |file|
sha256 = Digest::SHA256.file file
A.push(CFPropertyList::Blob.new(sha256.digest[0..7]))
end
end

plist = A.to_plist({:plist_format => CFPropertyList::List::FORMAT_XML, :formatted => true})

File.write('hashes.plist', plist)

如果我处理 16 个目录(将上面的 'files/**' 替换为 'files/0*'),在我的机器上花费的时间是 0m0.340s。

但是如果我尝试处理所有这些,在处理了大约 34 个目录后,处理速度会急剧下降。

这是在最新的 OS X 上,使用普通的 ruby​​。该机器是 2011 年中期的 iMac,配备 12GB 内存和 3.4 GHz Intel Core i7。

限制因素似乎不是数组大小:因为如果我删除 sha256 处理并只存储文件名,则速度不会降低。

有什么我可以做得更好或可以跟踪问题的吗?我目前没有其他可用的操作系统或机器来测试这是否是 OS X 或机器特定的东西。

最佳答案

这是一个磁盘/FS 缓存问题。运行脚本完成并再次重新运行后,减速现象基本消失。使用另一台配备 SSD 的计算机也没有显示速度变慢。

关于ruby - 在 Ruby 中处理大量文件时变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34933625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com