Hey all, I was trying to track down the Last.fm memory leak [http://bugzilla.gnome.org/show_bug.cgi?id=523646] using heap-buddy [http://www.mono-project.com/HeapBuddy]. Ran this: $ cd bin $ mono --profile=heap-buddy:outfile Nereid.exe $ heap-buddy outfile backtraces > banshee_memory.txt While it was running, I switched to a last.fm station and just let it sit there for 20+ minutes. Overall memory usage grew a lot. I've attached banshee_memory.txt. Looks like there is something about Last.fm that's triggering a heck of a lot of ListView memory usage. Here are the top two: Backtrace # Total AvSz AvAge type=Hyena.Data.Gui.CellContext 167090 10.2M 64.0 0.0 Hyena.Data.Gui.ListView`1:PaintHeaderCell type=double[] 167090 6.4M 40.0 0.0 Hyena.Gui.CairoExtensions:ColorFromHsb Hyena.Gui.CairoExtensions:ColorShade Hyena.Gui.Theming.GtkTheme:DrawHeaderSeparator Hyena.Data.Gui.ListView`1:PaintHeaderCell Scott, Aaron - ideas? Why is PaintHeaderCell being called so often, and why does it use so much memory? Regards, Gabriel
Backtrace # Total AvSz AvAge
type=Hyena.Data.Gui.CellContext 167090 10.2M 64.0 0.0
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=double[] 167090 6.4M 40.0 0.0
Hyena.Gui.CairoExtensions:ColorFromHsb
Hyena.Gui.CairoExtensions:ColorShade
Hyena.Gui.Theming.GtkTheme:DrawHeaderSeparator
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=double[] 167090 6.4M 40.0 0.0
Hyena.Gui.CairoExtensions:ColorFromHsb
Hyena.Gui.CairoExtensions:ColorShade
Hyena.Gui.Theming.GtkTheme:DrawHeaderSeparator
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=double[] 167090 6.4M 40.0 0.0
Hyena.Gui.CairoExtensions:ColorFromHsb
Hyena.Gui.CairoExtensions:ColorShade
Hyena.Gui.Theming.GtkTheme:DrawHeaderSeparator
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=double[] 167090 6.4M 40.0 0.0
Hyena.Gui.CairoExtensions:ColorFromHsb
Hyena.Gui.CairoExtensions:ColorShade
Hyena.Gui.Theming.GtkTheme:DrawHeaderSeparator
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=Gtk.Callback 100679 5.0M 52.0 0.0
Gtk.Container:Forall_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=Hyena.Gui.AnimatedBox...__CompilerGenerated18 100679 3.1M 32.0 0.0
<>c__CompilerGenerated7:MoveNext
Hyena.Gui.AnimatedBox:ForAll
Gtk.Container:Forall_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=System.Reflection.ConstructorInfo[] 133672 3.1M 24.0 0.0
System.MonoType:GetConstructors
System.Activator:CreateInstance
System.Activator:CreateInstance
System.Activator:CreateInstance
GLib.Opaque:GetOpaque
Pango.Layout:get_FontDescription
Hyena.Data.Gui.ColumnCellText:Render
Hyena.Data.Gui.ColumnHeaderCellText:Render
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=System.Reflection.ConstructorInfo[] 133672 3.1M 24.0 0.0
System.MonoType:GetConstructors
System.Activator:CreateInstance
System.Activator:CreateInstance
System.Activator:CreateInstance
GLib.Opaque:GetOpaque
Pango.Context:get_FontDescription
Hyena.Data.Gui.ColumnCellText:Render
Hyena.Data.Gui.ColumnHeaderCellText:Render
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=Gdk.Rectangle 133672 3.1M 24.0 0.0
Gdk.Rectangle:New
Gtk.Style:PaintLayout
Hyena.Data.Gui.ColumnCellText:Render
Hyena.Data.Gui.ColumnHeaderCellText:Render
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=System.Reflection.ConstructorInfo[] 133672 3.1M 24.0 0.0
System.MonoType:GetConstructors
System.Activator:CreateInstance
System.Activator:CreateInstance
System.Activator:CreateInstance
GLib.Opaque:GetOpaque
Pango.FontDescription:Copy
Hyena.Data.Gui.ColumnCellText:Render
Hyena.Data.Gui.ColumnHeaderCellText:Render
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=Gdk.Rectangle 133672 3.1M 24.0 0.0
Gtk.Style:PaintLayout
Hyena.Data.Gui.ColumnCellText:Render
Hyena.Data.Gui.ColumnHeaderCellText:Render
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=byte[] 133672 2.8M 21.8 0.0
System.Text.Encoding:GetBytes
GLib.Marshaller:StringToPtrGStrdup
Pango.Layout:SetText
Hyena.Data.Gui.ColumnCellText:Render
Hyena.Data.Gui.ColumnHeaderCellText:Render
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=Hyena.Gui.AnimatedBox/<>c__CompilerGenerated7 100679 2.7M 28.0 0.0
Hyena.Gui.AnimatedBox:get_Widgets
Hyena.Gui.AnimatedBox:ForAll
Gtk.Container:Forall_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=System.Reflection.ConstructorInfo[] 100254 2.7M 28.0 0.0
System.MonoType:GetConstructors
System.Activator:CreateInstance
System.Activator:CreateInstance
GLib.ObjectManager:CreateObject
GLib.Object:GetObject
GLib.Object:GetObject
Hyena.Gui.PangoCairoHelper:CreateLayout
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=byte[] 133672 2.5M 20.0 0.0
System.Text.Encoding:GetBytes
GLib.Marshaller:StringToPtrGStrdup
Gtk.Style:PaintLayout
Hyena.Data.Gui.ColumnCellText:Render
Hyena.Data.Gui.ColumnHeaderCellText:Render
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=System.Type[] 133672 2.5M 20.0 0.0
System.Activator:CreateInstance
System.Activator:CreateInstance
System.Activator:CreateInstance
GLib.Opaque:GetOpaque
Pango.Layout:get_FontDescription
Hyena.Data.Gui.ColumnCellText:Render
Hyena.Data.Gui.ColumnHeaderCellText:Render
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=object[] 133672 2.5M 20.0 0.0
GLib.Opaque:GetOpaque
Pango.Layout:get_FontDescription
Hyena.Data.Gui.ColumnCellText:Render
Hyena.Data.Gui.ColumnHeaderCellText:Render
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=object[] 133672 2.5M 20.0 0.0
GLib.Opaque:GetOpaque
Pango.FontDescription:Copy
Hyena.Data.Gui.ColumnCellText:Render
Hyena.Data.Gui.ColumnHeaderCellText:Render
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=System.Type[] 133672 2.5M 20.0 0.0
System.Activator:CreateInstance
System.Activator:CreateInstance
System.Activator:CreateInstance
GLib.Opaque:GetOpaque
Pango.Context:get_FontDescription
Hyena.Data.Gui.ColumnCellText:Render
Hyena.Data.Gui.ColumnHeaderCellText:Render
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=object[] 133672 2.5M 20.0 0.0
GLib.Opaque:GetOpaque
Pango.Context:get_FontDescription
Hyena.Data.Gui.ColumnCellText:Render
Hyena.Data.Gui.ColumnHeaderCellText:Render
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=System.Type[] 133672 2.5M 20.0 0.0
System.Activator:CreateInstance
System.Activator:CreateInstance
System.Activator:CreateInstance
GLib.Opaque:GetOpaque
Pango.FontDescription:Copy
Hyena.Data.Gui.ColumnCellText:Render
Hyena.Data.Gui.ColumnHeaderCellText:Render
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=string 33552 2.4M 74.0 0.0
System.Text.StringBuilder:InternalEnsureCapacity
System.Text.StringBuilder:Append
System.String:FormatHelper
System.String:Format
System.String:Format
Banshee.GnomeBackend.GC...urationClient:CreateKey
Banshee.GnomeBackend.GConfConfigurationClient:Set
Banshee.GnomeBackend.GConfConfigurationClient:Set
Banshee.Configuration.ConfigurationClient:Set
Banshee.Configuration.SchemaEntry`1:Set
<>c__CompilerGenerated1:<ConnectEvents>c__5
Gtk.Widget:SizeRequestedSignalCallback
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=object[] 133672 2.0M 16.0 0.0
System.Activator:CreateInstance
GLib.Opaque:GetOpaque
Pango.Context:get_FontDescription
Hyena.Data.Gui.ColumnCellText:Render
Hyena.Data.Gui.ColumnHeaderCellText:Render
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
type=Pango.FontDescription 133672 2.0M 16.0 0.0
System.Reflection.MonoCMethod:Invoke
System.Reflection.MonoCMethod:Invoke
System.Activator:CreateInstance
System.Activator:CreateInstance
System.Activator:CreateInstance
GLib.Opaque:GetOpaque
Pango.Context:get_FontDescription
Hyena.Data.Gui.ColumnCellText:Render
Hyena.Data.Gui.ColumnHeaderCellText:Render
Hyena.Data.Gui.ListView`1:PaintHeaderCell
Hyena.Data.Gui.ListView`1:PaintHeader
Hyena.Data.Gui.ListView`1:OnExposeEvent
Gtk.Widget:exposeevent_cb
Gtk.Application:Run
Banshee.Gui.GtkBaseClient:Run
Banshee.Gui.GtkBaseClient:Startup
Hyena.Gui.CleanRoomStartup:Startup
Banshee.Gui.GtkBaseClient:Entry
Nereid.Client:Main
(skipped 71563 backtraces)