2011-12-31 8 views
1

私はローカルに保存する必要があるストリングのリストを持っています(リストは10アイテムから100アイテムの間で実行できると仮定します)。フラットデータベースにリストを書き込むか、シリアライゼーションを使用してリストを含むオブジェクトをフラット化する必要があるかどうかを知りたいですか?どちらがより高価(CPU単位)ですか?他のものよりも1つを高価にする条件は何ですか?Javaでさらに高価なものは何ですか?シリアライゼーションまたはファイルへの書き込み?

ありがとうございます!

+7

試してみると、ベンチマークではないのはなぜ? –

+1

他の要件を見て、それらに最も適したものを見てみましょう。 2つの選択肢は、異なるケースで使用される傾向があります...作業するのが苦痛であれば、より速いものを気にする人はいますか? – cHao

+2

10-100文字列しか書いていないのであれば、違いは見えないかもしれません。なぜあなたはそのような小さなデータセットのパフォーマンスに非常に関心がありますか?最も簡単な解決法を選択し、要件を満たしていない場合は変更してください。 – milan

答えて

0

私はローカルに保存する必要があるストリングのリストを持っています(リストは10アイテムから100アイテムの間で実行できます)。ストリングの全長(例えば未満10K)が小さいと仮定すると

、保存を行うために使用されるユーザ空間CPU時間は、シリアル化またはフラットファイルのいずれかを使用して、数ミリ秒である可能性が高いです。言い換えれば、ユーザーがその違いに気づかないほど速くなります。次の2つの選択肢(およびその他)の間で選択するための他の理由を見てする必要があります

  • それがコードを書く方法は簡単です。代替プルを行いますどのように多くの余分な依存関係

  • 。保存されたデータファイル...あなたがこれを行うために必要な場合での

  • 人間可読性/編集可能。

  • あなたがこれを行う必要がある場合に備えて、ファイルに保存されたものの「スキーマ」をどの程度簡単に変更できるか。

  • ファイル全体を書き換えずに1つの文字列を更新できるかどうか。これが適切かどうか。

  • アトミック更新、トランザクション、複雑なクエリなどの他のものがサポートされているかどうかをサポートします。私は上で言ったにも関わらず


そして、もし

は、あなたはまだ速くなるかを知りたい(そしてどのくらいのことで)、その後、ベンチマークを。実世界のパフォーマンスは、指定していない要因によって異なります。

Javaベンチマークを作成して意味のある結果が得られるようにするための重要な参考資料がいくつかあります。

そして、あなたはあなたの質問のこの部分に答えるために試すことができます。

よりも1は、より高価にする条件は何ですか他の?

(上記参照)

0

私は費用についてはよく分かりませんが、オブジェクトの表現には多くの時間が元の意図したデータよりも大きな大きなオブジェクトサイズを作成するメタデータ(および構造)がたくさん含まれているため、 これは、DOMオブジェクトにxml構造体を格納するときに発生する可能性があります。元のデータよりもメモリに約4倍のサイズが必要です。

上記に基づいて、オブジェクトとしてのシリアライズはより高価かもしれないと思います。また、最終製品の消費量も考慮する必要があります。生成されたファイルを人間が読めるようにするには、文字列データを読みやすくするためにシリアル化する必要があります。

1

特に文字列なので、1行に1つずつファイルに書き出します。シンプルで速く、はるかに簡単にテストできます。

関連する問題