У меня есть синтаксический анализатор, который анализирует и собирает требуемые поля и строит объект из него. Предположим, если XML как нижеРазбор xml, экспоненциальное увеличение времени
<xml>
<p1>
...
...
</p1>
<p2>
...
</p2>
...
...
</xml>
Мой ява код разбирает его и код, кажется, как показано ниже.
for each product //p1,p2 etc..
print start time
parse that node, which returns a object
print end time
add the object to list.
В примере кода ниже
products = (NodeList) xPath.evaluate("/xml/product",pxml,XPathConstants.NODESET);
for (int i = 0; i < products.getLength(); i++)
{
System.out.println("parsing product ::"+i+":" + (System.currentTimeMillis()-time));
BookDataInfo _parsedPoduct = ParseProduct(products.item(i));
System.out.println("parsing product finished ::"+i+":" + (System.currentTimeMillis()-time));
if (_parsedPoduct.getParsingSucceeded())
{
pparsedProducts.add(_parsedPoduct);
}
}
Я напечатал раз перед разбором узла и после этого времени экспоненциально растет с No.of продуктов, как для 1-го продукта занимает 100 мс, где, как 300-й продукт занимает 2000 мс. В каждом случае такая же часть кода выполняется для синтаксического анализа. Может ли кто-нибудь понять, почему это происходит?
Я не могу опубликовать код, который делает parseproduct, но узнал, где больше всего потребляется время.
private NodeList getNodelist(Node xml, String Name)
{
long time = System.currentTimeMillis();
System.out.println("Nodelist start::" + (System.currentTimeMillis() - time));
NodeList nodes = (NodeList)xPath.evaluate(Name,xml,XPathConstants.NODESET);
System.out.println("Nodelist end::" + (System.currentTimeMillis() - time));
return nodes;
}
аналогично для получения значения узла на узле Node STMT = (Узел) xPath.evaluate (Имя, XML, XPathConstants.NODE);
здесь xPath является статическим объектом типа XPath. , когда несколько раз вызываемая функция вызывается для продукта, более поздние вызовы занимают много времени, например, в начале это заняло 2/3 мс, но позже (например, продукт 300) для каждого вызова потребовалось 55-60 мс.
Могу ли я пропустить что-то здесь? Спасибо!
Сложно иметь идею, если у нас нет кода или образца содержимого XSD ... –
Какую структуру данных вы используете для хранения продуктов? – Evans
Моя идея - вы изобретаете колесо. Вместо этого вы должны использовать стандартную или, по крайней мере, широко распространенную библиотеку для синтаксического анализа/преобразования или доступа к вашему xml. – Matthias