From: John Carter Date: 2006-03-24T13:55:40+09:00 Subject: New Profiler. One of the rules of optimizing OO programs is to create less objects. Like a Good Green Environmentalist, you should Reduce, Recycle & Reuse. The next question is what objects are being created. My memory profiler I posted last year tells you that... http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/139987 It digs into ObjectSpace and sees what objects are currently alive. Very good for reducing the memory footprint, but not much use for decreasing garbage collection. So, here is my nifty NewProfiler which tells where what class of object is being created.... http://www.rubygarden.org/ruby?NewProfiler Just slap this code at the head of program and run... class Class alias_method :orig_new, :new @@count = 0 @@stoppit = false @@class_caller_count = Hash.new{|hash,key| hash[key] = Hash.new(0)} def new(*arg,&blk) unless @@stoppit @@stoppit = true @@count += 1 @@class_caller_count[self][caller[0]] += 1 @@stoppit = false end orig_new(*arg,&blk) end def Class.report_final_tally @@stoppit = true puts "Number of objects created = #{@@count}" total = Hash.new(0) @@class_caller_count.each_key do |klass| caller_count = @@class_caller_count[klass] caller_count.each_value do |count| total[klass] += count end end klass_list = total.keys.sort{|klass_a, klass_b| a = total[klass_a] b = total[klass_b] if a != b -1* (a <=> b) else klass_a.to_s <=> klass_b.to_s end } klass_list.each do |klass| puts "#{total[klass]}\t#{klass} objects created." caller_count = @@class_caller_count[ klass] caller_count.keys.sort_by{|call| -1*caller_count[call]}.each do |call| puts "\t#{call}\tCreated #{caller_count[call]} #{klass} objects." end puts end end end END { b = String.new Class.report_final_tally } John Carter Phone : (64)(3) 358 6639 Tait Electronics Fax : (64)(3) 359 4632 PO Box 1645 Christchurch Email : john.carter@tait.co.nz New Zealand Carter's Clarification of Murphy's Law. "Things only ever go right so that they may go more spectacularly wrong later." From this principle, all of life and physics may be deduced.