public void HeapCachedEnumerationMatches() { // Simply test that we can enumerate the heap. using (DataTarget dt = TestTargets.Types.LoadFullDump()) { ClrRuntime runtime = dt.ClrVersions.Single().CreateRuntime(); ClrHeap heap = runtime.Heap; List <ClrObject> expectedList = new List <ClrObject>(heap.EnumerateObjects()); heap.CacheHeap(CancellationToken.None); Assert.True(heap.IsHeapCached); List <ClrObject> actualList = new List <ClrObject>(heap.EnumerateObjects()); Assert.True(actualList.Count > 0); Assert.Equal(expectedList.Count, actualList.Count); for (int i = 0; i < actualList.Count; i++) { ClrObject expected = expectedList[i]; ClrObject actual = actualList[i]; Assert.True(expected == actual); Assert.Equal(expected, actual); } } }
/// <summary> /// Caches all relevant heap information into memory so future heap operations run faster and /// do not require touching the debuggee. /// </summary> /// <param name="cancelToken">A cancellation token to stop caching the heap.</param> /// <inheritdoc /> public void CacheHeap(CancellationToken cancelToken) => Heap.CacheHeap(cancelToken);