[英]XML schema creation takes long time
我有以下代碼:
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);
需要很長時間(30秒)才能對我的XSD文件執行。
經過對此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"
,速度非常快。
有人能告訴我使用maxOccurs="10000"
的問題是什么?
根據我的個人經驗,讓某些人認為“不合理”高價值的粒子受到影響會導致性能問題( 這個鏈接來自我瀏覽器的最愛)。
根本原因似乎是內存分配(由maxOccurs值指示的效果)。
此外,我還記得一個文檔項,它說明了一個閾值,超出該閾值,無論出於什么意圖和目的,解析器實際上都會將maxOccurs視為無限制,無論XSD說什么(如果我找到它,我將重新訪問此帖子) 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.