Java XML模式创建需要很长时间
我有以下代码:Java XML模式创建需要很长时间,java,xml,xsd,Java,Xml,Xsd,我有以下代码: public XsdValidator(Resource... xsds) { Preconditions.checkArgument(xsds != null); try { this.xsds = ImmutableList.copyOf(xsds); SchemaFactory schemaFactory = SchemaFactory.newInstance(W3C_XML_SCHEMA_NS_URI); LOGGER.
public XsdValidator(Resource... xsds) {
Preconditions.checkArgument(xsds != null);
try {
this.xsds = ImmutableList.copyOf(xsds);
SchemaFactory schemaFactory = SchemaFactory.newInstance(W3C_XML_SCHEMA_NS_URI);
LOGGER.debug("Schema factory created: {}",schemaFactory);
StreamSource[] streamSources = streamSourcesOf(xsds);
LOGGER.debug("StreamSource[] created: {}",streamSources);
Schema schema = schemaFactory.newSchema(streamSources);
LOGGER.debug("Schema created: {}",schema);
validator = schema.newValidator();
LOGGER.debug("Validator created: {}",validator);
} catch ( Exception e ) {
throw new IllegalArgumentException("Can't build XsdValidator",e);
}
}
这似乎是一行schemaFactory.newSchema(streamSources)代码>对我的XSD文件执行需要很长时间(30秒)
在对这个XSD进行了多次测试之后,似乎是因为我:
<xs:complexType name="entriesType">
<xs:sequence>
<xs:element type="prov:entryType" name="entry" minOccurs="0" maxOccurs="10000" />
</xs:sequence>
</xs:complexType>
问题是maxOccurs=“10000”
使用maxOccurs=“1”
或maxOccurs=“unbounded”
,速度非常快
有人能告诉我使用<代码> Max Survivs=“10000”< /C> >
< P>的问题是什么?根据我个人的经验,有一些可能被认为是“不合理的”高值的粒子是导致性能问题的原因(来自我的浏览器的最爱)。p>
根本原因似乎是内存分配(由maxOccurs值指示)
此外,我还记得一个文档项,其中说明了一个阈值,在所有意图和目的中,超过该阈值后,解析器实际上会将maxOccurs视为无界的,而不管XSD怎么说(如果我找到它,我将重新访问这篇文章)。您能试着使用maxOccurs=“unbounded”吗?在你的案例中你得到了什么?无界的结果已经在我的问题中@PetruGardea:太快了,不知怎么的,我错过了。。。这意味着它正在尝试分配内存(很可能)。我会运行性能分析器,只是为了确认。嗯。。。你问“使用有什么问题”。。。这就是为什么。至于原因,我过去经常遇到。我相信,如果您缩小搜索范围以匹配您的特定设置,您将发现更多…谢谢,我将接受该链接作为答案您提供的链接只是RAD(Eclipse)性能问题,而不是应用程序性能问题。。。对吧?@佩特罗Gardea@javaPlease42,不是真的,如果你仔细看,你可能会注意到这是一个Xerces问题;一些人报告说它仍然在2.11中显现(我不能证实)。