- PR -

XercesのXMLスキーマチェックパフォーマンス向上

1
投稿者投稿内容
オズマ
会議室デビュー日: 2004/11/01
投稿数: 1
投稿日時: 2004-11-01 17:04
はじめまして。
Xerces2.6.2を使用したアプリケーションを作成しているのですが、
以下のようなスキーマを作り、スキーマチェックを実行したところ、
OutOfMemoryエラーとなりました。

-----
Hoge.xsd

<?xml version="1.0" encoding="Shift_JIS"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:include schemaLocation="HogeType.xsd" />
<xsd:element name="HogeMainSet">
<xsd:complexType>
<xsd:sequence>
<xsd:element name = "HogeSubSet" minOccurs = "1" maxOccurs = "5000" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name = "Hoge1" type="HogeType" />
<xsd:element name = "Hoge2" type="HogeType" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>


HogeType.xsd

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:simpleType name="HogeType">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="256"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>

-----

このとき、「maxOccurs = "5000"」と記述しているところを
「maxOccurs = "unbounded"」と書き直すと、
OutOfMemoryエラーが発生しませんでした。

色々と調べたつもりですが、maxOccursに大きい値を使うべきではない
というような話はどこにもありませんでした。
なぜ、上限値を設定しただけでメモリがパンクするのか、
いまいち分からないです。

ちなみに「maxOccurs = "10"」としても、
OutOfMemoryエラーが発生しませんでした。
3桁を超えたあたりからメモリがパンクするようです。

どなたか理由をご存知の方はいらっしゃいますでしょうか。
よろしくご返信お待ちしております。
1

スキルアップ/キャリアアップ(JOB@IT)