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