Я перебираю ResultSet в Java; который для целей тестирования возвращает около 30 строк с 17 столбцами (все данные String) на строку. Я вручную строю XML-строку из результатов, используя StringBuilder, и для выполнения этих итераций цикл буквально занимает около 36 секунд.
Примечание. Я понимаю, что это не лучший способ извлечения XML из базы данных или даже не лучший способ получить XML из ResultSet - но это заставляет меня задуматься о низкой производительности независимо от этого.
Обновление: Согласно ответам, я должен обратиться к следующему:
Время выполнения запроса меньше секунды, и я сделал System.currentTimeMillis () до и после каждого раздела моего кода, чтобы сузить это. 36 секунд полностью соответствуют приведенному ниже коду.
ResultSetMetaData rsmeta = rset.getMetaData();
StringBuilder resultBuilder = new StringBuilder();
resultBuilder.append("<?xml version=\"1.0\" ?><ROWSET>");
if(numColumns != 0){
while (rset.next()) {
resultBuilder.append("<ROW>");
for (int i = 0; i <= numColumns -1;i++) {
columnName = rsmeta.getColumnName(i+1);
resultBuilder.append("<");
resultBuilder.append(columnName);
resultBuilder.append(">");
resultBuilder.append(rset.getString(i+1));
resultBuilder.append("</");
resultBuilder.append(columnName);
resultBuilder.append(">");
}
resultBuilder.append("</ROW>");
numRows += 1;
}
}
else {
stmt.close();
wsConn.close();
return "No Results";
}
Обновление: Учитывая полученные мной предложения - этот код занимает примерно столько же времени, сколько дается или занимает полсекунды.
StringBuilder resultBuilder = new StringBuilder();
resultBuilder.append("<?xml version=\"1.0\" ?><ROWSET>");
if(numColumns != 0){
while (rset.next()) {
resultBuilder.append("<ROW>");
for (int i = 0; i <= numColumns -1;i++) {
//columnName = rsmeta.getColumnName(i+1);
resultBuilder.append("<");
resultBuilder.append("TestColumnName");
resultBuilder.append(">");
//resultBuilder.append(rset.getString(i+1));
resultBuilder.append("TestData");
resultBuilder.append("</");
resultBuilder.append("TestColumnName");
resultBuilder.append(">");
}
resultBuilder.append("</ROW>");
numRows += 1;
}
}
else {
stmt.close();
wsConn.close();
return "No Results";
}
Последний тест, который я выполнил, исключив все остальное, состоял в том, чтобы заменить тест while реалистичным числом итераций (160, максимальное количество строк, возвращенных из небольших тестов, которые я делал ранее). Теперь вопрос в том, что может быть такого набора результатов, который вызывает такое замедление.
while (numRows <= 160) {
// same as above
}
Обновление: Как и предполагалось, я закрою этот вопрос, поскольку заголовок не отражает направление, в котором возникла проблема.