2010-06-10 1 views
1

У меня есть апплет, который делает запрос на сервлет. На сервлета это с помощью PrintWriter, чтобы написать ответ обратно апплета:Проблема обработки больших данных с использованием апплета-сервлета

out.println("Field1|Field2|Field3|Field4|Field5......|Field10"); 

Есть около 15000 записей, поэтому out.println() запускается на выполнение около 15000 раз.

Проблема в том, что, когда апплет получает ответ от сервлета, для обработки записей требуется около 15 минут. Я разместил System.out.println, и обработка приостановлена ​​примерно на 5000, а затем через 15 минут она продолжает обработку, а затем ее завершается.

Неужели кто-нибудь сталкивался с подобной проблемой? Сервлет занимает около 2 секунд. Похоже, что браузер/апплет слишком медленный, чтобы обрабатывать записи.

Это код апплета. Иногда он просто останавливается на первом System.out и иногда останавливается на втором System.out.

while ((line = in.readLine()) != null) { 
    System.out.println("Reading from stream...."); 
    datavector.add(line); 
    System.out.println("Vector size="+datavector.size()+" Line added="+line); 
} 

Любые идеи оценили.

Спасибо.

ответ

0

Вы сомневаетесь, что «обработка приостановлена ​​около 5000 записей, а затем начинается сама по себе после 15»? ИЛИ это медленная обработка вашего аплета

Будет полезно, если вы отправите код на фрагмент кода?

+0

Привет, обработка скважины останавливается около 5000 и затем после 15 минут она начинается снова. Итак, почему обработка останавливается? Что делает Java? Есть ли способ улучшить производительность? – Marquinio

+0

Я предполагаю, что после того, как около 5000 записей система пытается GC некоторые неиспользуемые объекты. Я думаю, что в браузере IE, если вы открываете консоль java, у нее есть команды для отображения использования памяти и т. Д. Так что вы можете попробовать. Кроме того, просто определите основной метод в вашем апплете и запустите его как приложение java и посмотрите, останавливается ли около 5000 записей. Возможно, это даст вам некоторое представление о том, связана ли проблема с браузером или кодом в целом. Дайте нам знать, что вы найдете. – prashant

+0

Хорошо, я получил эту работу на прошлой неделе. Проблема заключалась в том, что код выполнял очень тяжелые манипуляции с строками. Внутри вложенных циклов код делал такие вещи, как str = str + "name1" + "name2". Переключившись на StringBuffer, время обработки прошло от 20 минут до 15 секунд !!! Спасибо за все ваши ответы. – Marquinio

0

Отсоедините линии System.out.println() от петли while. Вы за салдо звоните System.out.println() 30 000 раз. Это добавит много накладные расходы. Просто поместите один до и один после цикла while, если хотите.