Logan Capaldo
7/13/2005 9:50:00 PM
On Jul 13, 2005, at 5:30 PM, Scott Ellsworth wrote:
> Hi, all.
>
> Please find attached a simple Ruby script that rummages through my
> ITunes files, reads the first megabyte or so, finds the encoder, and
> then prints the encoder and filename. This lets me know which tracks
> need re-ripping.
>
> This script blows through half a gig of RAM while running, and I
> really
> do not see why. It should only have perhaps a few megabytes at max in
> RAM.
>
> FWIW, the output looks like:
> iTunes v4.9, QuickTime 7.0.1 /Users/work/Music/iTunes/iTunes
> Music/Yellowcard/Ocean Avenue Song1.m4a
> iTunes v4.9, QuickTime 7.0.1 /Users/work/Music/iTunes/iTunes
> Music/Yellowcard/Ocean Avenue Song2.m4a
> iTunes v4.9, QuickTime 7.0.1 /Users/work/Music/iTunes/iTunes
> Music/Yellowcard/Ocean Avenue Song3.m4a
>
> Style and speed optimizations are accepted, but the runtime is under a
> minute now for the 5500 files I have in my library, so memory usage is
> my real problem.
>
> Help?
>
> #!/usr/bin/env ruby
> require 'find'
> def procpath(f)
> if File.file?(f) then
> if File.fnmatch("*.m4a",f) then
> found = false
> data = IO.read(f, 65536*8)
> re = /[[:alnum:]_., ]{9,}/
> data.scan(re) do |string|
> if (string =~ /QuickTime/) then
> filename = File.basename(f)
> dirname = File.dirname(f)
> # puts "#{string} #{dirname}"
> puts "#{string} #{dirname} #{filename}"
> found = true
> break
> end
> end
> if (!found) then
> puts "Unknown #{f}"
> end
> end
> elsif File.directory?(f) && !File.fnmatch(".", f) &&
> !File.fnmatch("..", f) then
> Dir.foreach(f) { |subf| procpath(subf) }
> end
> end
>
> Find.find("/Users/work/Music/iTunes/iTunes Music/") do |f|
> procpath(f)
> end
>
> Scott
> --
> scott@alodar.nospam.com
> Java, Cocoa, and Database consulting for the life sciences
>
> --
> Scott Ellsworth
> scott@alodar.nospam.com
> Java and database consulting for the life sciences
>
>
Well mileage may vary and all that jazz, but on my box it took up
like ~30M virtual according to top and like 1.5MB ~ 2MB physical.
Have you tried explicity invoking the GC?