2016-05-15 17 views
1

私のプログラムは、ユーザーとAIの間で交代するJavaゲームです。したがって、すべての操作が完了したら、ターンが変わった後にのみ壊れる無限のwhileループがあります。私はタイマーを使用しているため、ユーザーが自分のターンを終了したときを予測できないため、無限ループのみを使用します。しかし、私のプログラムは時間がたつにつれてボタンがクリックされても何の効果もないほど遅くなることに気付きました。これが私のループですか?ヘルプをいただければ幸いです。遅いプログラムで、時間の経過とともにパフォーマンスが低下する

while(true) { 
    if(playerTurn % 2 == 1) { 
     artificialIntelligence(); 
     break; 
    } 
} 
+1

whileループの最後の前に 'Thread.sleep(10);'を追加してみてください。 –

+0

あなたのループには何も私たちの役に立つものはありません。 – shmosel

答えて

1

無限ループ(あなたのケースでループ中)を使用すると、この操作は頻繁に実行されます。アプリケーションが遅くなります。したがって、私は2つのスレッドでコードを壊すことをお勧めします。 1つのスレッドを使用してユーザターンイベントをチェックし、別のスレッドを使用してAIを実行します。ユーザーイベントが発生するとすぐに、このスレッドを停止し、必要な処理を行います。
このようにして、いつでもコードがブロックされることはありません。より良い性能をもたらす。

1

コードがなくても、問題の本当の原因を特定することは困難です。しかし、1人の容疑者は、オブジェクト参照を保持している可能性があり、ガベージコレクションによって回収されていない可能性があります。 Javaプロファイラを使用してみてください。問題が発生する場所を特定するのに役立ちます。

関連する問題