我有以下问题,当我有一个非常大的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。