void initClear() { HeapStrings.Clear(); HeapClasses.Clear(); HeapStacks.Clear(); HeapDumpSegments.Clear(); HeapRawDatas.Clear(); DumpClassObjects.Clear(); DumpObjectArrays.Clear(); DumpObjectInstances.Clear(); DumpPrimitiveArrays.Clear(); DumpPrimitiveArrayNoDatas.Clear(); }
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(); }); }