NTFSに負荷をかけてみるテスト
大量のファイルが入っているディレクトリから、「特定の年月のファイルだけ別ディレクトリに移動するRubyスクリプト」を書いた。負荷テストをしたところ、大変遅い。
- ディレクトリAに10KBのファイルを10万個作る(この時点で、このディレクトリをつかんだ瞬間にエクスプローラは固まります)。
- ディレクトリAの全ファイルをディレクトリBにRubyスクリプトでコピーする。
ディレクトリのファイルの数を見ていたのですが、3万ファイルくらいまでは高速に動いているようなのですが、急にがくっと遅くなっているようで、結局結果は下記のとおり。
遅くなる原因はなんなんだろう。
NTFSのせい?ディスクのせい?ライトキャッシュのせい?
これが普通なのか?
#第一引数 コピー元ディレクトリ #第二引数 コピー先ディレクトリ #第三引数 日付(yyyymm) require 'date' require 'fileutils' require 'find' p "start : " + Time.now.strftime("%Y%m%d%H%M%S") day = Time.now logprefix=day.strftime("%Y%m%d%H%M%S") copyfrom=ARGV[0] prefixdate=ARGV[2] copyto=ARGV[1] + "\\" + prefixdate +"-"+ logprefix d = Date.new(prefixdate[0..3].to_i,(prefixdate[4..5].to_i + 1) ,1) d = d - 1 1.upto(d.strftime("%d").to_i){|num| FileUtils.makedirs(copyto + "\\"+ num.to_s.rjust(2,"0")) } #ディレクトリのファイル一覧を取得 #ファイルの年月が一致していれば移動 Find.find(copyfrom) {|f| if File.file?(f) if prefixdate == File::stat(f).mtime.strftime("%Y%m") # FileUtils.copy_file f , copyto + "\\" + File::stat(f).mtime.strftime("%d") + "\\"+File.basename(f) , true FileUtils.move f , copyto + "\\" + File::stat(f).mtime.strftime("%d") + "\\"+File.basename(f) end end } p "end : " + Time.now.strftime("%Y%m%d%H%M%S") exit