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中显现(我不能证实)。