質問

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

役に立ちましたか?

解決

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

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

しかし、それは少量のデータであるため、重要ではないと言えます。

他のヒント

1kbのデータでは、標準のファイルIOを使用する方が適切です。ほとんどの場合、オブジェクトツリー全体をディスクにシリアル化し、再度起動したときにすぐに逆シリアル化できます。おしゃれにしたい場合は、JAXBを使用して、バイナリファイルではなくXMLにシリアル化できます。

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top