rubyクラスTable
があります。この行の最初の要素がまだ表示されていない場合は、すべての行についてこのクラスのオブジェクトを作成するためにcsvファイルを繰り返し処理します。ランダムに削除されたクラスのオブジェクト
require 'csv'
class Table
def initialize(name)
@name = name
@columns = {}
end
end
csv_tables = File.read("db_apm.csv")
csv_tables = CSV.parse(csv_tables, :headers => true)
csv_tables.each_with_index do |row, index|
# Check if object with the name present at row[0] has already been created
if ObjectSpace.each_object(Table).find { |object| object.instance_variable_get(:@name) == row[0] }.nil?
table = Table.new(row[0])
p row[0]
end
p ObjectSpace.each_object(Table).to_a.count
end
p "Final count"
p ObjectSpace.each_object(Table).to_a.count
csvファイルが変更されることはありませんが、私はいくつかの奇妙な結果見ている:
まず、各ループの再起動が終了する前に、カウントをここで
コードですスクリプトの同じ実行中に0で(私は1、2、3、... 50、1、2、3を見ることができます)。
また、最終的なカウントはスクリプトの実行ごとに変わります。私は時々17を得る、または私は204などを得ることができる、それは非常にランダムに見える。
なぜファイルが変更されていないので、これが起こっているのか分かりません。コードはかなり簡単です。ここで
は、ファイルの小さな抜粋です。このため
LOG_RECHERCHE
LOG_RECHERCHE
LOG_RECHERCHE
LOG_RECHERCHE
LOG_RECHERCHE
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
INTERVENTION
SUIVI_SCRIPT_SQL
SUIVI_SCRIPT_SQL
SUIVI_SCRIPT_SQL
SUIVI_SCRIPT_SQL
VUE_COMPILE_RENCONTRE
VUE_COMPILE_RENCONTRE
VUE_COMPILE_RENCONTRE
VUE_COMPILE_RENCONTRE
VUE_COMPILE_RENCONTRE
VUE_COMPILE_RENCONTRE
、最終カウントは4でなければなりません私は、問題は、ファイル(最終カウントの小さな一部で発生しますわからないんだけどファイル全体で約200になるはずです)。
何らかの理由でオブジェクトを削除していますか?
あなたの答えに感謝します。私はGCについて知っていましたが、私が驚いたのは、実行ごとに同じ数のオブジェクトを削除しなかったことです –