У меня есть HashMap, в котором хранятся внешние идентификаторы, а затем хранится другой идентификатор (внутренний для нашего приложения), который был установлен для данного идентификатора.
например:
- 123.345.432 = 00001
- 123.354.433 = 00002
Карта проверяется 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 (..., ...) значение.
Я загружаю один и тот же объект карты в обоих случаях, его файл ~ 400 КБ. Содержащаяся в нем HashMap содержит около 3000 пар ключ-значение.
Почему это так медленно на одной машине, но не в затмении?
Машина - это виртуальная машина под управлением XP, только недавно она начала медленно читать HashMap, поэтому она должна быть связана с ее размером, однако 400 КБ не очень большая, я не думаю.
Любой совет приветствуется, TIA