2017-10-01 1 views
-2

Donc j'essaye de faire une application de bot, essayant de voir comment je peux faire certaines choses dans C#. Je n'essaie pas de tricher ou alors, c'est un jeu mobile que je cours sur un émulateur. Ce n'est pas une application que j'essaie de vendre ou d'en tirer profit, c'est simplement une tâche pour moi d'apprendre à faire ce genre de choses.Utilisation de la mémoire d'application et bouclage

Toute comment, quand je lance l'application de la mémoire va jusqu'à 16 mb instantanément, aussi je suis en train de faire une boucle jusqu'à ce qu'un bouton d'arrêt a été cliqué.

Je fais des fonctions pour chaque action et j'utilise une minuterie pour exécuter toutes les fonctions à analyser si un pixel est détecté, mais l'application fonctionne lentement et prend beaucoup de mémoire, je me sens comme ce genre de "looping" n'est pas la bonne façon de faire ce genre d'action, j'ai aussi essayé la méthode while.

Toute personne qui est prêt à me dire ce que je fais?

Pastebin

private void timer1_Tick(object sender, EventArgs e) 
{ 
    if (timer1.Enabled == true) 
    { 
     // Checking if we entered Dragon's B10 
     if (inDungeon == false) 
     { 
      GoToDungeon(); 
     } 

     // Starting battle 
     autoSumPoint = AutoIt.AutoItX.PixelGetColor(2078, 61); // 0xF1EECF 
     if (autoSumPoint == 0xF1EECF) 
     { 
      StartBattle(); 
     } 
     else 
     { 
      GoToDungeon(); 
     } 

     // Starting auto-play 
     autoSumPoint = AutoIt.AutoItX.PixelGetColor(2296, 969); // 0xFFFFFF 
     if (autoSumPoint == 0xFFFFFF) 
     { 
      AutoCheck(); 
     } 

     // Starting battle 
     autoSumPoint = AutoIt.AutoItX.PixelGetColor(2755, 489); // 0xF1EECF 
     if (autoSumPoint == 0xF1EECF) 
     { 
      PauseCheck(); 
     } 

     // Checking for defeat 
     if (defeatChecked == false) 
     { 
      DefeatCheck(); 
     } 

     // Checking for defeat 
     if (defeatChecked == false) 
     { 
      DefeatCheck(); 
     } 

     // Checking for victory 
     if (victoryChecked == false) 
     { 
      VictoryCheck(); 
     } 

     // Checking for replay 
     autoSumPoint = AutoIt.AutoItX.PixelGetColor(2602, 587); // 0xF3C761 
     if (autoSumPoint == 0xF3C761) 
     { 
      ReplayCheck(); 
     } 

     // Checking for refill 
     if (energyRefilled == false) 
     { 
      RefillCheck(); 
     } 
    } 
} 
+0

Jetez un oeil à [Réduction de l'utilisation de la mémoire des applications .NET?] (Https://stackoverflow.com/q/1343374). Voir aussi [Utilisation de la mémoire C#] (https://stackoverflow.com/q/3803003), qui explique à quel point il est difficile de mesurer l'utilisation de la mémoire de votre application. – dbc

Répondre

0

J'envisagerait de modifier le délai entre chaque tic-tac de l'horloge, de sorte qu'il ne brûle pas votre CPU.

private void timer1_Tick(object sender, EventArgs e) 
{ 
    if (timer1.Enabled == true) 
    { 
     // Checking if we entered Dragon's B10 
     if (inDungeon == false) 
     { 
      GoToDungeon(); 
     } 

     // Starting battle 
     autoSumPoint = AutoIt.AutoItX.PixelGetColor(2078, 61); // 0xF1EECF 
     if (autoSumPoint == 0xF1EECF) 
     { 
      StartBattle(); 
     } 
     else 
     { 
      GoToDungeon(); 
     } 

     // Starting auto-play 
     autoSumPoint = AutoIt.AutoItX.PixelGetColor(2296, 969); // 0xFFFFFF 
     if (autoSumPoint == 0xFFFFFF) 
     { 
      AutoCheck(); 
     } 

     // Starting battle 
     autoSumPoint = AutoIt.AutoItX.PixelGetColor(2755, 489); // 0xF1EECF 
     if (autoSumPoint == 0xF1EECF) 
     { 
      PauseCheck(); 
     } 

     // Checking for defeat 
     if (defeatChecked == false) 
     { 
      DefeatCheck(); 
     } 

     // Checking for defeat 
     if (defeatChecked == false) 
     { 
      DefeatCheck(); 
     } 

     // Checking for victory 
     if (victoryChecked == false) 
     { 
      VictoryCheck(); 
     } 

     // Checking for replay 
     autoSumPoint = AutoIt.AutoItX.PixelGetColor(2602, 587); // 0xF3C761 
     if (autoSumPoint == 0xF3C761) 
     { 
      ReplayCheck(); 
     } 

     // Checking for refill 
     if (energyRefilled == false) 
     { 
      RefillCheck(); 
     } 
    } 
    System.Threading.Thread.Sleep(1000)//causes it to wait 1 second after each tick before the next one to reduce CPU usage 
} 

Voyez si cela vous aide!

Techcraft7 :)

+0

J'ai donc ajusté la vitesse de l'intervalle de la minuterie à 1000 et ajouté le fil de sommeil, il fait encore l'application laggy lors de son déplacement autour. Ce que je pensais, c'est que le processus de bouclage de l'application est mal utilisé, je crois qu'il existe une autre méthode pour rendre la boucle beaucoup plus lisse. – Tweath

+0

Essayez d'utiliser un thread distinct, mais invoquez une action afin de ne pas générer une exception (appris à la dure) – Techcraft7