何かでいっぱいの巨大なファイルを作成する必要があります。私はこのようにやっていますが、時間がかかります:
exit 1 unless ARGV.length > 0
File.open("file-#{ARGV[0]}M.txt", 'w') do |f|
(ARGV[0].to_i*1048576).times {f.write(1) }
end
それを行う最善の方法は何ですか(プラットフォームに依存しない方法で?)
*nix では、次を使用しますdd
。
system("dd if=/dev/zero of=" + f + " bs=1 count=0 seek=" + ARGV[0] + "M");
ファイルに(ゼロの代わりに)コンテンツが必要な場合は、使用します
/dev/random
のif
代わりに/dev/zero
非スパースファイルが必要な場合は、使用します
bs=#{ARGV[0]}M
そして省略seek
普遍的な方法:
#Create a 1M fill buffer
fills = '1'*1048576
File.open("file-#{ARGV[0]}M.txt", 'w') do |f|
(ARGV[0].to_i).times {f.write(fills) }
end
あなたが持っているものと似ていますが、一度に 1M 書き込みます。一度に 1 バイトを書き込むと、ハードディスクの検索と書き込みに多くのオーバーヘッドが生じます。一度に 1M を書き込むと、はるかに高速になります。さらに高速なハード ドライブ (16M/s など) を使用している場合は、1M を 16M に増やしてみてください。
純粋な Ruby オプション:
n = ARGV[0] or exit 1
File.open("file-#{n}M.txt", 'w') do |f|
contents = "x" * (1024*1024)
n.to_i.times { f.write(contents) }
end