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); }
public static bool IsBigVideoFilesCheckOk(string[] Filenames) { //определение наличия файлов большого размера Dictionary <string, double> BigBitrateFiles = new Dictionary <string, double>(); foreach (var filename in Filenames) { var ext = Path.GetExtension(filename); if (!File.Exists(filename) && (ext != ".avi" || ext != ".wmv")) { continue; } var Bitrate = Miscellanea.GetVideoBitRate(filename); if (Bitrate > Settings.GetInstance().MaxVideoFileBitrate) { BigBitrateFiles.Add(Path.GetFileName(filename), Bitrate / 1024); } } if (BigBitrateFiles.Count > 0) { string BigLenghtFilesString = ""; foreach (var BigLenghtFile in BigBitrateFiles) { BigLenghtFilesString += BigLenghtFile.Key + " : " + BigLenghtFile.Value.ToString("0") + "kbps\n"; } if (System.Windows.MessageBox.Show("Некоторые файлы видео имеют очень высокий битрейт (большое разрешение, частоту и т.п.)," + " что может замедлить работу, " + "вызвать недостаток оперативной памяти, в том числе в ходе " + "игры при выборе уровня с большим количеством таких файлов:\n\n" + BigLenghtFilesString + "\nВсе равно открыть указанные файлы?", "Очень большие файлы", (MessageBoxButton)MessageBoxButtons.YesNo, (MessageBoxImage)MessageBoxIcon.Information) == MessageBoxResult.No) { return(false); } } return(true); }