BB.Caching.Tests.SerializationAndCompression.SerializationAndCompressionTests.MemorySizePerformance C# (CSharp) Méthode

MemorySizePerformance() private static méthode

private static MemorySizePerformance ( ) : void
Résultat void
        private static void MemorySizePerformance()
        {
            /*
             * Some numbers:
             * ---------------------------------------------------------------------------------------------------------
             * 10k objects
             * ---------------------------------------------------------------------------------------------------------
             * maxStringSize            repeatStringSize            serialized vs Raw            compression vs raw
             * 1                        1                            92.4%                        93.8%
             * 17                       1                            88.7%                        90.0%
             * 128                      1                            73.9%                        74.7%
             * 2                        2                            92.7%                        93.8%
             * 17                       2                            86.7%                        89.7%
             * 128                      2                            73.9%                        74.7%
             * 4                        4                            90.5%                        91.6%
             * 17                       4                            86.7%                        89.7%
             * 128                      4                            73.9%                        68.8%
             * 128                      128                          73.9%                        56.8%
             * 
             * 10,000                   10,000                       50.7%                         1.8%
             * 100,000                  100,000                      50.1%                         0.2%
             */

            const int MAX_STRING_SIZE = 10000;
            const int REPEAT_STRING_SIZE = 10;
            const int ITERATIONS = 1000;
            const string KEY = "impt-key";

            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
            GC.WaitForPendingFinalizers();

            long mCs = GC.GetTotalMemory(true);
            MemoryCache cM = new MemoryCache("cM");
            for (int i = 0; i < ITERATIONS; i++)
            {
                var m = new MultipleProperties
                    {
                        Id = GenerateId(),
                        Name = GenerateString(MAX_STRING_SIZE, REPEAT_STRING_SIZE)
                    };

                byte[] s = ProtoBufSerializer.Serialize(m);
                byte[] c = SmartCompressor.Instance.CompressAsync(s).Result;
                cM.Set(KEY + i.ToString(CultureInfo.InvariantCulture), c, null);
            }

            long mCe = GC.GetTotalMemory(true);
            long compressMemory = mCe - mCs;

            cM.Trim(100);
            cM.Dispose();
            // ReSharper disable once RedundantAssignment
            cM = null;

            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
            GC.WaitForPendingFinalizers();

            long mSs = GC.GetTotalMemory(true);
            MemoryCache sM = new MemoryCache("sM");
            for (int i = 0; i < ITERATIONS; i++)
            {
                var m = new MultipleProperties
                    {
                        Id = GenerateId(),
                        Name = GenerateString(MAX_STRING_SIZE, REPEAT_STRING_SIZE)
                    };

                byte[] s = ProtoBufSerializer.Serialize(m);
                sM.Set(KEY + i.ToString(CultureInfo.InvariantCulture), s, null);
            }

            long mSe = GC.GetTotalMemory(true);
            long serializeMemory = mSe - mSs;

            sM.Trim(100);
            sM.Dispose();
            // ReSharper disable once RedundantAssignment
            sM = null;

            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
            GC.WaitForPendingFinalizers();

            long mRs = GC.GetTotalMemory(true);
            MemoryCache rM = new MemoryCache("rM");
            for (int i = 0; i < ITERATIONS; i++)
            {
                var m = new MultipleProperties
                    {
                        Id = GenerateId(),
                        Name = GenerateString(MAX_STRING_SIZE, REPEAT_STRING_SIZE)
                    };
                rM.Set(KEY + i.ToString(CultureInfo.InvariantCulture), m, null);
            }

            long mRe = GC.GetTotalMemory(true);
            long rawMemory = mRe - mRs;

            rM.Trim(100);
            rM.Dispose();
            // ReSharper disable once RedundantAssignment
            rM = null;

            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
            GC.WaitForPendingFinalizers();

            Console.WriteLine("Memory Size:");
            Console.WriteLine("  Raw: {0:#,##0.#}KB", rawMemory / 1024.0);
            Console.WriteLine(
                "  Serialized: {0:#,##0.#}KB ({1:0.00}%)",
                serializeMemory / 1024.0,
                ((float)serializeMemory / rawMemory) * 100);
            Console.WriteLine(
                "  Serialized + Compressed: {0:#,##0.#}KB ({1:0.00}%)",
                compressMemory / 1024.0,
                ((float)compressMemory / rawMemory) * 100);
        }