ホームページ  >  に質問  >  本文

Java で JDBC を使用して、RAM 消費量を増やさずにデータベース サーバーの継続的な更新を実装する方法

私は JavaFX で格闘ゲームを作成し、JDBC を使用して情報を MySQL データベースに更新しました。データベース サーバーから基本情報を取得するタスクのほとんどは、継続的に繰り返さなければ正常に動作します。問題は、ゲーム内の位置、レベル、ダメージなどの対戦相手の情報を常に更新するプログラムが必要な場合に発生します。常に選択コマンドをサーバーに送信する必要があるため、これらのコマンドを実行するスレッドが使用する RAM が増加します。

リーリー

いくつかの方法を探してみたところ、非常に便利な方法を見つけました。各選択の後、別の選択を行う前にスレッドをしばらくスリープさせます。このアプローチによりパフォーマンスが大幅に向上し、RAM 消費量は安定したままになります。ただし、このアプローチは、「選択」スレッドの短いスリープによって依然として RAM の消費量が増加するため、常に更新する必要があるクエリ情報には適していません。この問題を解決し、中間のゲーム サーバーを経由せずにゲームをデータベース サーバーに直接接続できるようにする有効な方法はありますか。

P粉323224129P粉323224129408日前757

全員に返信(1)返信します

  • P粉136356287

    P粉1363562872023-09-08 16:23:50

    まず変数を最適化してみる必要があります。

    スレッドはクエリ時に新しい文字列を使用し続けますが、実際に構築する必要があるのは 1 回だけです。同様に、ResultSet の場合、新しいループに入るたびに、RAM 内の新しい場所を使用して新しいオブジェクトを保存します。

    これは、Java ID オブジェクトの外側にコンソール出力を追加することで確認できます。

    リーリー

    次に、出力結果が毎回異なるかどうかを観察します。

    ###このような:### リーリー

    そこで、xPos/yPos が「-1」に等しくない値のみを選択し、実際の対戦相手の位置変更の結果のみを取得し、最終的には「」を送信しないようにクエリを変更することを検討するようお願いしました。 new Position" の代わりに、2 つの変数 OptionX と OptionY を送信するだけで、このオブジェクトを RAM に保存する必要がなくなります。

    忘れないでください。Java はコードの実行が完了した後にのみ RAM オブジェクトをクリーンアップするため (要するに)、終了しない単一のスレッドがあってもこれはトリガーされません。

    返事
    0
  • キャンセル返事