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.
            }
        }
示例#2
0
 /// <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));
            }
        }