1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Результаты поиска

  1. un712
  2. un712
  3. un712
  4. un712
  5. un712
  6. un712
  7. un712
    Всем привет. Подскажите пожалуйста такую вещь. Перед выпуском патча игры создаю БД (sqlite) файлов внутри папки. У каждого файла проверяю имя, размер и узнаю MD5 Перед запуском игры проверяю файлы на наличие изменений. private string ComputeMD5Checksum(string path) { using (FileStream fs = File.OpenRead(path)) { MD5 md5 = new MD5CryptoServiceProvider(); byte[] fileData = new byte[fs.Length]; fs.Read(fileData, 0, (int)fs.Length); byte[] checkSum = md5.ComputeHash(fileData); string result = BitConverter.ToString(checkSum).Replace("-", String.Empty); return result; } } private void ListFiles() { try { path = Path.Combine(path, "Data"); var dir = new DirectoryInfo(path); int qt = dir.GetFiles("*.*", SearchOption.AllDirectories).Length; BeginInvoke((MethodInvoker)(() => { progressBar1.Maximum = qt; })); foreach (var files in dir.GetFiles("*.*", SearchOption.AllDirectories)) { BeginInvoke((MethodInvoker)(() => { lProgr.Text = files.Name; })); db_con DBCON = new db_con(); cmd_db = new SQLiteCommand("Select * FROM files WHERE FName='" + files.Name + "'", DBCON.GetConnection()); rdr_db = cmd_db.ExecuteReader(); string DBName = ""; int Size = 0; string MDS = ""; while (rdr_db.Read()) { DBName = rdr_db[0].ToString(); Size = Convert.ToInt32(rdr_db[1].ToString()); MDS = rdr_db[2].ToString(); } DBCON.CloseConnection(); if (ComputeMD5Checksum(files.FullName) != MDS) { List<string> err = new List<string>(); err.Add("Create time " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + "\r" + files.Name + " in DB " + DBName + "\rLength loc - " + files.Length + " in DB " + Size + "\rMD5 loc - " + ComputeMD5Checksum(files.FullName) + " in DB " + MDS + Environment.NewLine + "//=======================================================================================//" + Environment.NewLine); File.AppendAllLines(@"acd.log", err); } BeginInvoke((MethodInvoker)(() => { progressBar1.Value++; })); _d++; BeginInvoke((MethodInvoker)(() => { lblPerc.Text = ((_d * 100) / qt).ToString() + "%"; })); if (_d > (qt / 2)) { BeginInvoke((MethodInvoker)(() => { label1.Text = "Начинаем подготовку к упаковке"; })); } if (_d > (qt - (qt / 4))) { BeginInvoke((MethodInvoker)(() => { label1.Text = "Почти закончили"; })); } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); } try { Process GameClient = new Process(); string pathClient = Path.Combine(Application.StartupPath.ToString(), "Game.exe"); GameClient.StartInfo.FileName = pathClient; //GameClient.StartInfo.ErrorDialog = true; //auto show errors GameClient.Start(); //Запускаем клиент!!! //Бесконечный поток жрёт много CPU //Делаем в таймере раз в 30 секунд //BeginInvoke((MethodInvoker)(() => { Thread.Sleep(3000); Silent(); })); tmrAntiCheat.Start(); // Invoke((MethodInvoker)(delegate { this.Visible = false; })); //Запускаем проверку в бесконечном потоке. } catch (Exception ex) { /*close window*/ BeginInvoke((MethodInvoker)(() => { #if DEBUG MessageBox.Show(ex.ToString()); #endif label1.Text = "Ошибка! " + ex.Message + " Game.exe"; tmrClose.Start(); })); } } Весь код работает хорошо. Но вот теперь задача, можно ли как то сделать так, чтобы программа запускалась только на менее загруженных ядрах? Если конечно такие есть. Хоть проверка и занимает пару секунд у меня, не факт что она будет занимать тоже время и у другого игрока. Хочется сделать процесс менее заметным md5 замени на xxhash и забудь про CPU. Узким местом станет жесткий.
    Сообщение от: un712, 25 янв 2020 в разделе: .NET
  8. un712
  9. un712
  10. un712
  11. un712
  12. un712
  13. un712
  14. un712
  15. un712
    1.3.6 только есть // 1.4.5, 1.4.6
    Сообщение от: un712, 24 окт 2017 в разделе: PW Вопросник
  16. un712
  17. un712
  18. un712
  19. un712
  20. un712