0
我有一个名为Table
的ruby类,我遍历一个csv文件,为每一行创建这个类的对象,如果这行的第一个元素还没有被看到。随机删除Class'objects
下面是代码:
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)。
ruby是否因某些原因删除对象?
感谢您的回答。我知道GC,但是让我感到惊讶的是,它并没有为每次运行删除相同数量的对象 –