示例#1
0
        public static bool IsEnoughtMemoryForLevelLoad(GameCardsNewDB.Struct.CardsNewDBLevel level)
        {
            int    MaxMemoryMb;
            double SafetyFactor     = 1.3;
            double RequiredMemoryMb = SafetyFactor * CalculateRequiredMemoryForLevel(level) / 1_048_576;
            var    ramCounter       = new PerformanceCounter("Memory", "Available MBytes", true);
            double MemoryAvalableMb = Convert.ToDouble(ramCounter.NextValue());

            if (Is64Bit)
            {
                MaxMemoryMb = 4096;
            }
            else
            {
                MaxMemoryMb = 1024;
            }
            var MemoryUsedNow = (double)(Process.GetCurrentProcess().WorkingSet64) / 1048576;

            if (MemoryUsedNow + RequiredMemoryMb > MaxMemoryMb || RequiredMemoryMb > MemoryAvalableMb)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
示例#2
0
        public static double CalculateRequiredMemoryForLevel(GameCardsNewDB.Struct.CardsNewDBLevel level)
        {
            double ImgMemoryKoef            = 34;
            double BmpMemoryKoef            = 2.5;
            double GifMemoryKoef            = 80;
            double VideoBitrateKoef         = 40;
            double MediaElementMemoryLenght = 40 * 1024 * 1024;
            //double MaxVideoLenght;
            //if(Is64Bit) MaxVideoLenght = 90 * 1024 * 1024;
            //else MaxVideoLenght = 60 * 1024 * 1024;

            double RequiredMemory = 0;

            foreach (var card in level.DbLevelRecord.Cards)
            {
                string filename = Sets.Settings.GetInstance().DefaultImage;

                if (File.Exists(card.ImageAddress))
                {
                    filename = card.ImageAddress;
                }
                if (!File.Exists(filename))
                {
                    continue;
                }
                string ext      = Path.GetExtension(filename);
                long   FileSize = new FileInfo(filename).Length;
                switch (Path.GetExtension(filename))
                {
                case ".jpg":
                case ".png":
                    RequiredMemory += ImgMemoryKoef * FileSize;
                    break;

                case ".bmp":
                    RequiredMemory += BmpMemoryKoef * FileSize;
                    break;

                case ".gif":
                    RequiredMemory += GifMemoryKoef * FileSize;
                    break;

                case ".avi":
                case ".wmv":
                    var bitrate = Miscellanea.GetVideoBitRate(filename);
                    var tmpsize = (long)(MediaElementMemoryLenght + VideoBitrateKoef * bitrate);
                    RequiredMemory += tmpsize;
                    Console.WriteLine(filename + " bitrate=" + bitrate / 1024 + "  Size=" + (tmpsize / (1024 * 1024)).ToString());
                    break;

                default:
                    break;
                }
            }

            return(RequiredMemory);
        }