我有一个 HashMap 存储外部 uid,然后它存储为给定 uid 设置的不同 id(我们的应用程序的内部)。
例如:
地图由 uid 检查以确保将使用相同的内部 id。如果某些内容重新发送给应用程序。
DICOMUID2StudyIdentiferMap 定义如下:
private static Map DICOMUID2StudyIdentiferMap = Collections.synchronizedMap(new HashMap());
Run Code Online (Sandbox Code Playgroud)
但是,如果我们成功加载,加载将覆盖它,否则它将使用默认的空 HashMap。
它通过执行以下操作从磁盘读回:
FileInputStream f = new FileInputStream( studyUIDFile );
ObjectInputStream s = new ObjectInputStream( f );
Map loadedMap = ( Map )s.readObject();
DICOMUID2StudyIdentiferMap = Collections.synchronizedMap( loadedMap );
Run Code Online (Sandbox Code Playgroud)
使用以下方法将 HashMap 写入磁盘:
FileOutputStream f = new FileOutputStream( studyUIDFile );
ObjectOutputStream s = new ObjectOutputStream( f );
s.writeObject(DICOMUID2StudyIdentiferMap);
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,在 Eclipse 中本地运行的性能很好,但是当应用程序在机器上正常使用时,HashMap 需要几分钟才能从磁盘加载。加载后,通过查看 DICOMUID2StudyIdentiferMap.put(..., ...) 是否会返回一个值来检查以前的值也需要很长时间。
我在两种情况下都加载了相同的地图对象,它是一个 ~400kb 的文件。它包含的 HashMap …