private ulong MakeCallStack(ProfilerSession ps, uint[] callStack, ObjectType type, uint size)
 {
     ulong typeid = FindType(ps, type);
     string flags = String.Format("1 {0} {1}", typeid, size);  //"1" means a type id and size come before the call stack.
     return MakeCallStackInternal(ps, callStack, flags);
 }
        private ulong FindType(_PRF.ProfilerSession ps, ObjectType type)
        {
            if (m_typeIdLookup.ContainsKey(type))
            {
                return m_typeIdLookup[type];
            }
            else
            {
                //FIXME: Need to know which types are finalizable
                StringBuilder typeName = new StringBuilder(ps.ResolveTypeName(type.Type));

                for (int i = 0; i < type.Rank; i++)
                {
                    typeName.Append("[]");
                }
                ulong typeid = m_nextTypeId++;
                m_typeIdLookup.Add(type, typeid);
                m_sw.WriteLine("t {0} 0 {1}", typeid, typeName.ToString());
                return typeid;
            }
        }