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

Последнее сообщение от Fituchini

  1. Fituchini
  2. Fituchini
  3. Fituchini
  4. Fituchini
  5. Fituchini
  6. Fituchini
  7. Fituchini
    Всем привет. Подскажите пожалуйста такую вещь. Перед выпуском патча игры создаю БД (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(); })); } } Весь код работает хорошо. Но вот теперь задача, можно ли как то сделать так, чтобы программа запускалась только на менее загруженных ядрах? Если конечно такие есть. Хоть проверка и занимает пару секунд у меня, не факт что она будет занимать тоже время и у другого игрока. Хочется сделать процесс менее заметным
    Автор темы: Fituchini, 20 янв 2020, ответов - 8, в разделе: .NET
  8. Fituchini
  9. Fituchini
  10. Fituchini
  11. Fituchini
  12. Fituchini
    Сообщения профиля

    Пожалуйста ждите...

    Пожалуйста ждите...
    Обновление статуса пользователя Fituchini, 22 июл 2019
  13. Fituchini
    Изображения прикрепил
    Сообщение от: Fituchini, 22 июл 2019 в разделе: PW Разработки