私はシミュレートされた型を生成するプログラムを持っています。プログラムは、ファイルの場所がどこにあるか、拡張子と共にファイルをユーザー入力します。次に、反復を使用してファイルを分割し、配列に格納します。Ruby配列やハッシュを最適化する
def file_to_array(file)
empty = []
File.foreach("#{file}") do |line|
empty << line.to_s.split('')
end
return empty.flatten!
end
プログラムが実行されると、それはwin32ole
を経由して入力してシミュレートするために、テキスト領域にキーを送信します。
5,000文字を超えると、メモリオーバーヘッドが大きくなりすぎ、プログラムが遅くなります。さらに過去5,000文字ほど、遅くなります。これを最適化する方法はありますか?
--EDIT--
require 'Benchmark'
def file_to_array(file)
empty = []
File.foreach(file) do |line|
empty << line.to_s.split('')
end
return empty.flatten!
end
def file_to_array_2(file)
File.read(file).split('')
end
file = 'xxx'
Benchmark.bm do |results|
results.report { print file_to_array(file) }
results.report { print file_to_array_2(file) }
end
user system total real
0.234000 0.000000 0.234000 ( 0.787020)
0.218000 0.000000 0.218000 ( 1.917185)
私は正しく行き渡っていません - 配列 'empty'は要素ごとに1文字を格納しますか?あなたは単にテキストを保存し、 'each_char'を使ってそれを繰り返すことを考えましたか? (または、それをまったく保管していないのですが...?) –
@ Aetherusの提案に基づいてこのようなメソッドを使って代替メソッドを書いたが、テストしたところ、メモリは約7,000プログラムが遅くなり始めた。このコードスニペットで現在使用している方法は、約5,000文字になります。改善ですが、十分ではありません。私が最適化のために見てきたことを通して、私はシステムのストレスを半減させました。ここで完全なコードを見ることができます。 https://github.com/sinithwar/LazyProjects/blob/master/RubyTypingSim.rb –