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()); }