public virtual void TestChainedEstimation() { Random rnd = Random(); Entry first = new Entry(); try { while (true) { // Check the current memory consumption and provide the estimate. long jvmUsed = GC.GetTotalMemory(false); long estimated = RamUsageEstimator.SizeOf(first); Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "{0:0000000000}, {1:0000000000}", jvmUsed, estimated)); // Make a batch of objects. for (int i = 0; i < 5000; i++) { first.CreateNext(new sbyte[rnd.Next(1024)]); } } } #pragma warning disable 168 catch (System.OutOfMemoryException e) #pragma warning restore 168 { // Release and quit. } }
/// <summary> /// Return the memory usage of this class in bytes. </summary> public long RamBytesUsed() { return(RamUsageEstimator.AlignObjectSize(3 * RamUsageEstimator.NUM_BYTES_OBJECT_REF + 2 * RamUsageEstimator.NUM_BYTES_INT32) + RamUsageEstimator.SizeOf(data) + positions.RamBytesUsed() + wordNums.RamBytesUsed()); }
public virtual void TestOverflowMaxChainLength() { int UPPERLIMIT = 100000; int lower = 0; int upper = UPPERLIMIT; while (lower + 1 < upper) { int mid = (lower + upper) / 2; try { ListElement first = new ListElement(); ListElement last = first; for (int i = 0; i < mid; i++) { last = (last.Next = new ListElement()); } RamUsageEstimator.SizeOf(first); // cause SOE or pass. lower = mid; } #pragma warning disable 168 catch (StackOverflowException e) #pragma warning restore 168 { upper = mid; } } if (lower + 1 < UPPERLIMIT) { Assert.Fail("Max object chain length till stack overflow: " + lower); } }
public virtual void TestSanity() { Assert.IsTrue(RamUsageEstimator.SizeOf("test string") > RamUsageEstimator.ShallowSizeOfInstance(typeof(string))); Holder holder = new Holder(); holder.holder = new Holder("string2", 5000L); Assert.IsTrue(RamUsageEstimator.SizeOf(holder) > RamUsageEstimator.ShallowSizeOfInstance(typeof(Holder))); Assert.IsTrue(RamUsageEstimator.SizeOf(holder) > RamUsageEstimator.SizeOf(holder.holder)); Assert.IsTrue(RamUsageEstimator.ShallowSizeOfInstance(typeof(HolderSubclass)) >= RamUsageEstimator.ShallowSizeOfInstance(typeof(Holder))); Assert.IsTrue(RamUsageEstimator.ShallowSizeOfInstance(typeof(Holder)) == RamUsageEstimator.ShallowSizeOfInstance(typeof(HolderSubclass2))); string[] strings = new string[] { "test string", "hollow", "catchmaster" }; Assert.IsTrue(RamUsageEstimator.SizeOf(strings) > RamUsageEstimator.ShallowSizeOf(strings)); }
public virtual void TestStaticOverloads() { Random rnd = Random; { sbyte[] array = new sbyte[rnd.Next(1024)]; assertEquals(RamUsageEstimator.SizeOf(array), RamUsageEstimator.SizeOf((object)array)); } { bool[] array = new bool[rnd.Next(1024)]; assertEquals(RamUsageEstimator.SizeOf(array), RamUsageEstimator.SizeOf((object)array)); } { char[] array = new char[rnd.Next(1024)]; assertEquals(RamUsageEstimator.SizeOf(array), RamUsageEstimator.SizeOf((object)array)); } { short[] array = new short[rnd.Next(1024)]; assertEquals(RamUsageEstimator.SizeOf(array), RamUsageEstimator.SizeOf((object)array)); } { int[] array = new int[rnd.Next(1024)]; assertEquals(RamUsageEstimator.SizeOf(array), RamUsageEstimator.SizeOf((object)array)); } { float[] array = new float[rnd.Next(1024)]; assertEquals(RamUsageEstimator.SizeOf(array), RamUsageEstimator.SizeOf((object)array)); } { long[] array = new long[rnd.Next(1024)]; assertEquals(RamUsageEstimator.SizeOf(array), RamUsageEstimator.SizeOf((object)array)); } { double[] array = new double[rnd.Next(1024)]; assertEquals(RamUsageEstimator.SizeOf(array), RamUsageEstimator.SizeOf((object)array)); } }