[Mono-list] newbie - understanding profiler data

pjsmith pjsmith at mtgsy.net
Wed Aug 31 11:51:45 EDT 2011


Hi,

My vb.net app running under mono on linux(built under .net on windows) is
using a lot of memory.  I tried to use the profiler running on linux to see
where this is all going, but having some problems interpreting exactly what
I see.  I read the profiler info on the mono site, but whilst it explains
how to use it, it doesn't do much about telling how to interpret the
results!

I'm seeing data like the following and am surprised at the memory usage.

########################
  118830 KB System.IO.StreamWriter::Initialize(Encoding,int)
       79194 KB     4948 System.Byte[]
       39635 KB     4948 System.Char[]
  Callers (with count) that contribute at least for 1%:
        4944  99 % System.IO.StreamWriter::.ctor(string,bool,Encoding,int)
########################
  102769 KB
Mono.Globalization.Unicode.SortKeyBuffer::Initialize(CompareOptions,int,string,bool)
      102769 KB  3599832 System.Byte[]
  Callers (with count) that contribute at least for 1%:
      449979  100 %
Mono.Globalization.Unicode.SimpleCollator::GetSortKey(string,int,int,CompareOptions)
########################
   81311 KB System.Collections.Generic.Dictionary`2::Resize()
       31979 KB    54578 .Link[]
       16458 KB    54598 System.String[]
       16457 KB    54595 System.Int32[]
       16416 KB    54578 System.Object[]
  Callers (with count) that contribute at least for 1%:
       54581  99 %
System.Collections.Generic.Dictionary`2::set_Item(TKey,TValue)
########################
   60706 KB System.String::ToCharArray()
       60706 KB   305281 System.Char[]
  Callers (with count) that contribute at least for 1%:
      283019  92 %
Microsoft.VisualBasic.Strings::Replace(string,string,string,int,int,bool)
       17182   5 %
Microsoft.VisualBasic.Strings::Split(string,string,int,CompareMethod)
        4969   1 % System.IO.TextWriter::.ctor()
########################
   60047 KB System.Text.StringBuilder::.ctor(string,int,int,int,int)
       60047 KB   294018 System.String
  Callers (with count) that contribute at least for 1%:
      294018  100 % System.Text.StringBuilder::.ctor(string,int,int,int)
########################
   56349 KB System.String::Remove(int,int)
       56349 KB   217892 System.String
  Callers (with count) that contribute at least for 1%:
      217892  100 % ConsoleApplication1.Module1::GetRecords(string,soa)
########################
   39647 KB System.IO.FileStream::InitBuffer(int,bool)
       39647 KB     4953 System.Byte[]
  Callers (with count) that contribute at least for 1%:
        4948  99 %
System.IO.FileStream::.ctor(string,FileMode,FileAccess,FileShare,int,bool,FileOptions)
########################
   38670 KB
Mono.Globalization.Unicode.SimpleCollator::GetSortKey(string,int,int,CompareOptions)
       38670 KB   449979 Mono.Globalization.Unicode.SortKeyBuffer
  Callers (with count) that contribute at least for 1%:
      449979  100 %
Mono.Globalization.Unicode.SimpleCollator::GetSortKey(string,CompareOptions)
########################
   32156 KB System.String::ConcatInternal(string[],int)
       32156 KB    86981 System.String
  Callers (with count) that contribute at least for 1%:
       86981  100 % System.String::Concat(string[])
########################
   29879 KB System.String::SubstringUnchecked(int,int)
       29879 KB  1394496 System.String
  Callers (with count) that contribute at least for 1%:
     1715586  77 % System.String::Substring(int,int)
      449964  20 % System.String::Substring(int)
       37896   1 % System.Text.StringBuilder::ToString()
########################
   27962 KB System.String::CreateString(char,int)
       27962 KB  1211286 System.String
  Callers (with count) that contribute at least for 1%:
     1211286  100 % System.String::.ctor(char,int)
########################
   27741 KB maxmind.LookupService::init()
       27741 KB        3 System.Byte[]
  Callers (with count) that contribute at least for 1%:
           1  100 % maxmind.LookupService::.ctor(string,int)
########################
   25583 KB System.Text.Encoding::GetBytes(string)
       25583 KB  1433648 System.Byte[]
  Callers (with count) that contribute at least for 1%:
     1421228  99 %
MySql.Data.MySqlClient.MySqlPacket::WriteStringNoNull(string)

I've tried calling gc.collect (I know, bad), but it doesn't help much.  Now
experimenting with .dispose, but this is all managed code, so not sure any
of this should really be needed?

Mono version is 2.4.4 and I'm running it under Ubuntu 10.4.

Does anyone have any suggestions or pointers to material where I can learn a
bit more about this, or any suggestions for preserving memory when running
apps under mono?

Thanks.

--
View this message in context: http://mono.1490590.n4.nabble.com/newbie-understanding-profiler-data-tp3781405p3781405.html
Sent from the Mono - General mailing list archive at Nabble.com.


More information about the Mono-list mailing list