私が見ている現在のコードベースは、DOMパーサーを使用しています。次のコードフラグメントは、5つのメソッドで複製されます。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
上記のコードを含むメソッドがループで呼び出された場合、またはメソッドがアプリケーションで複数回呼び出された場合、そのようなメソッドの呼び出しごとに新しいDocumentBuilderFactoryインスタンスと新しいDocumentBuilderインスタンスを作成するオーバーヘッドが発生します。
以下に示すように、DocumentBuilderファクトリとDocumentBuilderインスタンスの周りにシングルトンラッパーを作成することをお勧めします。
public final class DOMParser {
private DocumentBuilderFactory = new DocumentBuilderFactory();
private DocumentBuilder builder;
private static DOMParser instance = new DOMParser();
private DOMParser() {
builder = factory.newDocumentBuilder();
}
public Document parse(InputSource xml) {
return builder.parser(xml);
}
}
上記のシングルトンが複数のスレッドで共有されている場合に発生する可能性のある問題はありますか?そうでない場合は、アプリケーションの存続期間中に一度だけDocumentBuilderFactoryおよびDocumentBuilderインスタンスを作成する上記のアプローチを使用することで、パフォーマンスが向上しますか?
編集 :
問題に直面する可能性があるのは、次のXMLファイルの解析に影響を与える可能性のあるXMLファイルの解析中にDocumentBuilderが状態情報を保存する場合のみです。