私は、外部uidを保存し、与えられたuidに設定されている別のID(アプリケーションの内部)を保存するHashMapを持っています。ディスクに保存されているHashMapのディスクからの読み込みが非常に遅い
例えば:
- 123.345.432 = 00001
- 123.354.433 = 00002
マップは同じ内部IDが使用されることを確認するために、UIDによってチェックされます。何かがアプリケーションに再送された場合。
次のように定義さDICOMUID2StudyIdentiferMap:我々が正常にロードする場合
private static Map DICOMUID2StudyIdentiferMap = Collections.synchronizedMap(new HashMap());
負荷は、しかし、それ以外の場合は、デフォルトの空のHashMapを使用しますが、それを上書きします。
そのを行うことによって、バックディスクから読み:
FileInputStream f = new FileInputStream(studyUIDFile);
ObjectInputStream s = new ObjectInputStream(f);
Map loadedMap = (Map)s.readObject();
DICOMUID2StudyIdentiferMap = Collections.synchronizedMap(loadedMap);
をHashMapのは、使用してディスクに書き込まれます。
FileOutputStream f = new FileOutputStream(studyUIDFile);
ObjectOutputStream s = new ObjectOutputStream(f);
s.writeObject(DICOMUID2StudyIdentiferMap);
私が持っている問題は、ローカルのEclipseのパフォーマンスで動作していることは結構です、ですが、ときアプリケーションは通常、HashMapがディスクからロードするのに数分かかるマシン上で実行されています。ロードされると、DICOMUID2StudyIdentiferMap.put(...、...)が値を返すかどうかを確認することによって、以前の値をチェックするのに時間がかかります。
どちらの場合でも、〜400kbのファイルで同じマップオブジェクトをロードします。 HashMapに含まれるHashMapには約3000個のキーと値のペアがあります。
なぜ1台のマシンでは非常に遅いですが、eclipseでは遅いですか?
マシンはXPを実行しているVMですが、最近ではHashMapの読み込みが遅くなっているので、そのサイズに関係する必要がありますが、400kbはそれほど大きくはありません。
何かアドバイス歓迎、TIA
私の助言は、jvisualvmを使ってアプリケーションを攻撃して、その時間がどこで使われたかを調べることです。もう1つの選択肢は、同期化されたラッパーを削除して、状況が改善するかどうかを確認することです。 – biziclop