我有一个存储外部 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 个键值对。
为什么在一台机器上这么慢,而在 Eclipse 中却没有?
该机器是运行XP的VM,它最近才开始读取HashMap变得缓慢,因此它必须与它的大小有关,但是我认为400kb并不是很大。
欢迎任何建议,TIA