我有以下问题,当我有一个非常大的 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 文件的最终大小为 250MB。