1

他のエージェントと対戦する小さなエージェントを Java で作成しています。過去の成功に基づいてエージェントのパフォーマンスを微調整できるように、プログラムの実行間で少量の状態 (おそらく最大で約 1kb) を保持したいと考えています。基本的に、各ゲームの開始時に少量のデータを読み取り、最後に少量のデータを書き込みます。ファイル I/O またはダービーの 2 つのオプションがあるようです。どちらにも速度の利点はありますか?それとも、そのような少量のデータでは問題になりませんか?

4

2 に答える 2

2

1kbのデータでは、標準のファイルIOを使用することをお勧めします。ほとんどの場合、オブジェクトツリー全体をディスクにシリアル化し、再起動時に非シリアル化することができます。凝ったものにしたい場合は、バイナリファイルの代わりにJAXBを使用してXMLにシリアル化できます。

私はすべての問題をデータベースソリューションに適合させるのが大好きですが、ここではそれがあまり実用的ではないと思います。データベース固有の機能が特別に必要な場合を除いて、データベースを使用すると、多くのオーバーヘッド、複雑さ、メンテナンスの問題が発生します。

データベースを実際に使用したいのは、小さなオブジェクト/行がたくさんあり、データに対して頻繁に並べ替えとフィルターを実行する場合だけです。しかし、それでも、おそらく1ダースのメモリ内の順序付きリストを保持し、より少ないリソースでデータベースの頭痛の種なしにパフォーマンスを向上させることができます。

このシナリオでデータベースが本当に必要だと思う場合は、HSQLを検討してください。私はそれを実際のデータベースとは考えていませんが、ファイルに永続化できるインメモリデータベースです。オーバーヘッドが低く、複雑さが低く、障害点が比較的少ない。さらに、永続化されたデータを編集する必要がある場合は、テキストエディタを使用して編集できます。ダービーについては言えません。

于 2008-11-06T21:12:13.943 に答える
1

これらのオブジェクトはファイル サイズごとに異なる可能性があり、コンピューターの仕様 (バス速度、HD 速度) がこれに影響することを考慮すると、確実にする唯一の方法は、独自のベンチマークを作成することです。単純な for ループを作成し、1 から 1000 までカウントし、ループ内のファイルを何度も読み取るだけです (ただし、ループ内でオブジェクトを作成および破棄するのではなく、読み取り部分だけに注目してください)。

もちろん、この演習全体は最適化前の悪臭を放ち、悪いコーディング習慣につながる可能性があります。最も読みやすくシンプルな方法でコードを記述し、速度の問題がある場合は、必要に応じてリファクタリングしてください。

しかし、それは少量のデータなので、問題にはならないと思います。

于 2008-11-06T20:36:16.450 に答える