外部uidを格納するHashMapがあり、特定のuidに設定されている別のID(アプリの内部)を格納します。
例えば:
- 123.345.432 = 00001
- 123.354.433 = 00002
マップはuidによってチェックされ、同じ内部IDが使用されることを確認します。アプリケーションに何かが再送された場合。
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には、約3000のキーと値のペアがあります。
なぜ1台のマシンではそれほど遅いのに、Eclipseではそうではないのですか?
このマシンはXPを実行しているVMであり、HashMapの読み取りが遅くなり始めたばかりなので、そのサイズに関係している必要がありますが、400kbはそれほど大きくないと思います。
アドバイスを歓迎します、TIA