「お昼の放送」の思い出

 先日、javaで数千件のデータとの照合(マッチング)
処理を行うプログラムを作ったときのことですが、
照合するデータをすべてメモリ上におくとjava.lang.
outofmemory のエラーがでるので、ハードディスクから順次メモリ上に取り出すようにしました。

 RandomAccessFile でreadInt や readChar を繰り返し、10分間くらい使うものだったのですが、プログラムの修正など半日ほど使っていたら、ハードディスクが”ピー、ピー"という警告音のようなものを発しました。(プログラムを終了するととまりました。)

 これは、ディスクへのアクセスが多すぎたことが
原因なのでしょうか。どうぞご回答よろしくお願い
いたします。

A 回答 (1件)

とりあえず、そのHDDディスクのバックアップをとり


CHKDSK(SCANDISK)することをお勧めします。
破損クラスタがあるかも。
(破損クラスタが大量にあったら交換した方が良い)

あと大量のデータの場合、ファイルのオープンクローズは
可能な限り少ない方がいいですし、
何度ものreadInt() はやめたほうが良いです。
(ファイルのリードはかなりのオーバーヘッドですし、少なからずHDDへの負担にもなります。)
read(byte[] b, int off, int len)
あるいはreadFully(byte[] b, int off, int len)
を使ってください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

スキャンディスクをしてみたところ、
異常はないようでほっとしました。

やはりreadInt()を繰り返すより
readやreadFullyなどで一気に読
みこむべきなのですね。readInt
のほうが使い方が簡単だからと
ついつい多用していました。
ディスクへの負担をへらすように
心がけたいと思います。

的確なアドバイスをくださり、
とても助かりました。
どうもありがとうございます。

お礼日時:2005/04/29 10:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報