Сериализация EMF-модели в файл XML занимает несколько часов

У меня есть следующая проблема: когда у меня есть очень большая модель EMF (>1G в куче) для сериализации в файл XML, это занимает несколько часов. Я понятия не имею, делаю ли я что-то не так, что вызывает такую ​​долгую задержку или это обычно занимает много времени. У нас есть много списков в модели, но в остальном есть просто много объектов, которые являются узлами графа с очень длинным UUID и несколькими параметрами, которые в основном являются целыми числами и другими строковыми значениями, такими как имена и так далее.

Вот выдержка из моей процедуры сохранения модели EMF:

// Register the XMI resource factory
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
reg.getExtensionToFactoryMap().put(uri.fileExtension(), new XMIResourceFactoryImpl());

// Obtain a new resource set
ResourceSet resSet = new ResourceSetImpl();

// create a resource
Resource resource = resSet.createResource(uri);

// get resource content
EList<EObject> resourceContent = resource.getContents();

resourceContent.add(objectsToAdd);

// save to file
resource.save(ResourceAdder.createOptions());

Вот так выглядят мои варианты:

public static Map<?, ?> createOptions() {
    HashMap<String, Object> options = new HashMap<String, Object>();
    options.put(XMLResource.OPTION_ENCODING, "UTF-8"); //$NON-NLS-1$
    options.put(XMLResource.OPTION_CONFIGURATION_CACHE, Boolean.TRUE);
    options.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
    return options;
}

Итак, мой вопрос: если обычно так долго сериализуют большую модель EMF? Что вы предлагаете мне сделать, чтобы сократить количество времени, необходимое для сериализации модели. Я уже рассматривал возможность использования Teneo и сериализации всей модели EMF в локальную базу данных Derby, но я еще не тестировал ее, улучшит ли она время выполнения. Спасибо за любые указатели или предложения, которые вы можете предоставить.

Я добавил анализ кучи, выполненный VisualVM, из очень маленького графика, который все еще занимал несколько минут для сериализации. Окончательный размер всех XML-файлов составляет 250 МБ.HeapAnalysisOfSmallGraph

0 ответов

Другие вопросы по тегам