我必须从各种流计算哈希值(StringIO,File,chunked http response ...),并且源代码非常大(大约100MB - 1GB)。例如,我有以下代码
require 'digest'
sha = Digest::SHA256.new
stream = StringIO.new("test\nfoo\nbar\nhello world")
# this could also be a File.open('my_file.txt')
# or a chunked http response
while content = stream.read(2)
sha.update content
end
puts sha.to_s
到目前为止,这是有效的,但我想知道 sha.update
方法如何工作。它是否在其实例中存储整个String的副本,以便整个内容保存在内存中?
当将1GB数据加载到RAM中(并在同一台机器上的多个进程上执行此操作)时,这可能会导致一些严重的内存问题。