该代码用于一个软件(API)中的脚本控制台。该软件是一个文档审查平台。一旦用户浏览了文档并标记了哪些文档是相关的,它们就成为current_selected_items。我们要做的是抓住每个文档并与其他文档进行比较以过滤掉重复文档。当我们通过迭代器执行此操作时,每个文档都会被加载并且永远不会丢失,从而创建膨胀,因为有数百万个文档。最终的崩溃是“内存不足”,执行终止。
我们如何使用迭代器但一次只处理一定数量的文档或将内存使用量设置为最大值?
$current_selected_items.each do |item|
counter += 1
if counter % 5000 == 0
processing_elapsed = Time.at(Time.now - start_time).gmtime.strftime("%H:%M:%S")
puts "[#{processing_elapsed}] #{counter}/#{num_items_selected} documents done, #{processed_items.count} duplicates processed"
end
next if processed_items.include? item
processed_items << item
dupes = item.get_duplicates
next if dupes.count == 0
master_text = item.get_text_object.to_string
is_text_consistent = true
dupes.each do |dupe_item|
processed_items << dupe_item
dupe_text = dupe_item.get_text_object.to_string
if dupe_text == "" then next end
unless master_text.eql? dupe_text
is_text_consistent = false
break
end
end