Ruby PStore与元帅的表现

问题描述 投票:1回答:1

我试图决定是否在我的代码中实现PStore,而不是将各种对象另存为Marshal。以下代码试图比较两种方法的性能:

require 'pstore'

def m_dump(filename, object)
    File.open(filename,"wb") do |f|
        Marshal.dump(object, f)
    end
end

def m_load(filename)
    object = nil
    File.open(filename,'rb') do |f|
        object = Marshal.load(f)
    end
    return object
end

test = {}
test[:pi] = [Math::PI]*100000000

start = Time.now
m_dump("test.marshal", test);nil
puts "Marshal File written in #{(Time.now - start).to_s}"

start = Time.now
results = PStore.new("test.pstore")
results.transaction{results[:test] = test};nil
puts "Pstore File written in #{(Time.now - start).to_s}"

start = Time.now
test2 = m_load("test.marshal");nil
puts "Marshal File read in #{(Time.now - start).to_s}"

start = Time.now
results2 = PStore.new("test.pstore")
test3 = results2.transaction{results2[:test]};nil
puts "Pstore read in #{(Time.now - start).to_s}"

puts "Marshal check #{test2 == test}"
puts "Pstore check #{test3 == test}"

运行代码将产生以下结果:

Marshal File written in 7.936485
Pstore File written in 5.526494
Marshal File read in 5.890848
Pstore read in 11.135965

[似乎在创建新档案时PStore稍微快一些,但是在必须读取数据时要慢得多。

考虑到PStore始终基于Marshal,所以我希望有类似的性能。这是预期的行为吗?

ruby marshalling
1个回答
0
投票

交易=>交易(true)其中“ true”表示只读。然后,性能将与marshall相似。

start = Time.now
results2 = PStore.new("test.pstore")
test3 = results2.transaction(true) {results2[:test]}; nil
puts "Pstore read in #{(Time.now - start).to_s}"
© www.soinside.com 2019 - 2024. All rights reserved.