Пример #1
0
        void initClear()
        {
            HeapStrings.Clear();
            HeapClasses.Clear();
            HeapStacks.Clear();
            HeapDumpSegments.Clear();
            HeapRawDatas.Clear();

            DumpClassObjects.Clear();
            DumpObjectArrays.Clear();
            DumpObjectInstances.Clear();
            DumpPrimitiveArrays.Clear();
            DumpPrimitiveArrayNoDatas.Clear();
        }
Пример #2
0
        void initObjectInfo()
        {
            PrimitiveArrayInfos = DumpPrimitiveArrays.Select(c => new PrimitiveArrayInfo(c)).ToList();
            ObjectArrayInfos    = DumpObjectArrays.Select(c => new ObjectArrayInfo(c, this)).ToList();

            ObjectInstanceInfos = DumpObjectInstances
                                  .Select(c => new ObjectInstanceInfo(c, this)).ToList();
            ObjectInstanceWithDataInfos = ObjectInstanceInfos.Where(c => c.InstanceFields != null && c.InstanceFields.Count > 0).ToList();

            ObjectInfoDictionary = ObjectInstanceInfos.ToDictionary(k => k.ObjectID, v => (object)v);
            foreach (var it in PrimitiveArrayInfos)
            {
                ObjectInfoDictionary.Add(it.PrimitiveArrayID, (object)it);
            }
            foreach (var it in ObjectArrayInfos)
            {
                ObjectInfoDictionary.Add(it.ObjectArrayID, (object)it);
            }

            Parallel.ForEach(ObjectInstanceWithDataInfos, item =>
            {
                foreach (var it in item.InstanceFields)
                {
                    if (it.Type == PrimitiveType.HPROF_BASIC_OBJECT)
                    {
                        if (ObjectInfoDictionary.ContainsKey((int)it.Value))
                        {
                            (it as ReferenceObjectInfo).ReferenceTarget = ObjectInfoDictionary[(int)it.Value];
                        }
                    }
                }
            });
            Parallel.ForEach(ObjectArrayInfos, item =>
            {
                item.Elements = item.ElementIDs.Select(c => ObjectInfoDictionary.ContainsKey(c)
                ? ObjectInfoDictionary[c] : null).ToList();
            });
        }