Example #1
0
        public ImageFlyweight GetFlyweight(FlyweightTypes type)
        {
            //ImageFlyweight flyweight = null;
            // If current specified flyweight type was already created:
            if (_flyweights.TryGetValue(type, out ImageFlyweight existingFlyweight))
            {
                return(existingFlyweight);
            } // If specified flyweight type does not exist in factory:
            else
            {
                Image img;
                switch (type)
                {
                case FlyweightTypes.Player:
                    img = ImageResources.PlayerImage;
                    var newPlayerFlyweight = new PlayerFlyweight(img);
                    _flyweights.Add(FlyweightTypes.Player, newPlayerFlyweight);
                    return(newPlayerFlyweight);

                case FlyweightTypes.Platform:
                    img = ImageResources.PlatformImage;
                    var newPlatformFlyweight = new PlayerFlyweight(img);
                    _flyweights.Add(FlyweightTypes.Platform, newPlatformFlyweight);
                    return(newPlatformFlyweight);

                default:
                    return(null);
                }
            }
        }
        public static void TestWithoutFlyweightFactory(int n)
        {
            var items = new List <ImageFlyweight>();
            var timer = new Stopwatch();

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

            var memoryBefore = System.Diagnostics.Process.GetCurrentProcess().VirtualMemorySize64;

            timer.Start();

            for (int i = 0; i < n; i++)
            {
                //Console.WriteLine("without " + i + ":::" + Process.GetCurrentProcess().VirtualMemorySize64);
                var newPlayerObject   = new PlayerFlyweight(ImageResources.PlayerImage);
                var newPlatformObject = new PlayerFlyweight(ImageResources.PlatformImage);
                newPlayerObject.drawUnit(new Tuple <int, int>(center, center), size, size);
                newPlatformObject.drawUnit(new Tuple <int, int>(center, center), size, size);
                items.Add(newPlayerObject);
                items.Add(newPlatformObject);
            }
            timer.Stop();
            var memoryAfter = System.Diagnostics.Process.GetCurrentProcess().VirtualMemorySize64;
            var memoryDiff  = (memoryAfter - memoryBefore) / 1024 / 1024;
            var duration    = timer.ElapsedMilliseconds;

            PrintResults("Test WITHOUT flyweight design pattern", n, memoryDiff.ToString(), duration.ToString());
        }