有没有更快的方法在ruby中生成随机字符串?
235秒 有没有更快的方法在ruby中生成随机字符串?不需要执行36**1024 1000000次 这肯定会节省一些时间不需要做36**1024 1000000次有没有更快的方法在ruby中生成随机字符串?,ruby,Ruby,235秒 有没有更快的方法在ruby中生成随机字符串?不需要执行36**1024 1000000次 这肯定会节省一些时间不需要做36**1024 1000000次 这肯定会节省一些时间您可以洗牌字符串以获得随机字符串 val=36**1024 1000000.times do rand(val).to_s(36) end =>126秒您可以洗牌字符串以获得随机字符串 val=36**1024 1000000.times do rand(val).to_s(36) end =>126秒
这肯定会节省一些时间您可以洗牌字符串以获得随机字符串
val=36**1024
1000000.times do
rand(val).to_s(36)
end
=>126秒您可以洗牌字符串以获得随机字符串
val=36**1024
1000000.times do
rand(val).to_s(36)
end
=>126秒使用securerandom怎么样
array = rand(36**1024).to_s(36).split(//)
start_time = Time.now
1000000.times do
array.shuffle.join
end
end_time = Time.now
puts end_time - start_time
使用securerandom怎么样
array = rand(36**1024).to_s(36).split(//)
start_time = Time.now
1000000.times do
array.shuffle.join
end
end_time = Time.now
puts end_time - start_time
如果目标系统具有/dev/uradom,则可以从中随机读取字节。它应该更快。下面是带有基准测试的代码。一些Ruby库使用这种方法来生成随机的东西
require 'securerandom'
start_time = Time.now
1000000 .times do
SecureRandom.base64(1024)
end
end_time = Time.now
puts end_time - start_time
在这里,您可以看到100000、1024个字符长的随机字符串的基准测试结果
Benchmark.bm do|b|
b.report("Ruby #rand ") do
100000.times do
big_key = rand(36**1024).to_s(36)
end
end
b.report("/dev/urandom") do
File.open("/dev/urandom",File::RDONLY || File::NONBLOCK || File::NOCTTY) do |f|
100000.times do
big_key = f.readpartial(512).unpack("H*")[0]
end
end
end
end
如果目标系统具有/dev/uradom,则可以从中随机读取字节。它应该更快。下面是带有基准测试的代码。一些Ruby库使用这种方法来生成随机的东西
require 'securerandom'
start_time = Time.now
1000000 .times do
SecureRandom.base64(1024)
end
end_time = Time.now
puts end_time - start_time
在这里,您可以看到100000、1024个字符长的随机字符串的基准测试结果
Benchmark.bm do|b|
b.report("Ruby #rand ") do
100000.times do
big_key = rand(36**1024).to_s(36)
end
end
b.report("/dev/urandom") do
File.open("/dev/urandom",File::RDONLY || File::NONBLOCK || File::NOCTTY) do |f|
100000.times do
big_key = f.readpartial(512).unpack("H*")[0]
end
end
end
end
=>1.8秒
简而言之,Object.new.hash.to_
=>1.8秒
简而言之,Object.new.hash.to_s您在这里有点作弊,因为您在计时循环之外执行了大部分实际随机化。您在这里有点作弊,因为您在计时循环之外执行了大部分实际随机化。旁注:使用。要求“基准”;Benchmark.measure{1000000.times{rand36**1024.to_s36}}。旁注:使用。要求“基准”;Benchmark.measure{1000000.times{rand36**1024.to_s36}}。我喜欢你的想法,但是第二个基准中的big_key=f.readpartial512.unpach*[0]行只执行一次。您应该使用与第一种情况相同的度量方法,即100000.times,然后重新运行基准测试。想法是从/dev/uradom读取数据,直到获得足够的随机字节。我明白了,但您的代码总共读取512字节,而不是10000*512字节。您正在对单个执行而不是10k执行进行基准测试。我喜欢您的想法,但是第二个基准测试中的big_key=f.readpartial512.unpach*[0]行只执行一次。您应该使用与第一种情况相同的度量方法,即100000.times,然后重新运行基准测试。想法是从/dev/uradom读取数据,直到获得足够的随机字节。我明白了,但您的代码总共读取512字节,而不是10000*512字节。您正在对单个执行进行基准测试,而不是对10k个执行进行基准测试。XD不能。。。在下面standddobject.new.hash.to_注释。XD不能。。。在下面standddobject.new.hash.to_