2009-05-07 5 views
2

Я написал программу Java для загрузки HTML-страницы. Но использование ЦП составляет около 100%, а использование сети - менее 3%. Похоже, что этот процессор стал моим узким местом. Как сократить использование процессора?Есть ли предложения по сокращению использования ЦП в Java?

+3

Вам нужно будет опубликовать исходный код, иначе мы не сможем помочь вам, кроме как сообщить вам использовать профилировщик ... –

+0

[Вот простой и эффективный способ узнать, что занимает время. ] (http://stackoverflow.com/questions/266373/one-could-use-a-profiler-but-why-not-just-halt-the-program/317160#317160) –

ответ

6

Используйте профилировщик (мне нравится VisualVM), определите узкое место и исправьте его!

5

Если у вас есть непрерывный цикл while, дайте вашей программе sleep время между итерациями. Загрузка веб-страниц сама по себе не должна приводить к большему использованию ресурсов, но вы можете захотеть просмотреть профилировщик, чтобы узнать, что вас узкоключает. Возможно, размещение кода здесь позволит нам немного помочь.

2

Если ваше использование процессора почти на 100% длительное время, то, скорее всего, у вас есть ошибка в коде (бесконечный цикл или что-то еще). Попробуйте просмотреть свое приложение, чтобы узнать, что происходит. Начните с печати текущего времени из разных точек вашего кода. Если вы все еще не можете найти это, вам понадобится профайлер.

+0

Если цикл бесконечен, захват пара трассировок стека найдет его. Если цикл не бесконечен, а просто длинный, тот же метод работает. –

3

Очень простая вещь, которую вы можете сделать, чтобы идентифицировать проблему, - это просто захватить несколько трасс стека. ctrl-/Ctrl-Break/jstack/JConsole/VisualVM. Если программа катастрофически тратит много времени, когда проблема производительности (разумно вероятна), то вы должны легко увидеть проблему.

+1

++ избили меня. Это мой любимый метод. –

1

Может быть, вы опрос данных слишком быстро ...

Я хотел бы попробовать изменить код для уведомления событийного.

С уважением.

1

Когда вы читаете, вы читаете символ/байт за раз? Это будет загружать ОС совсем немного.

Используйте BufferedReader, и/или пытаться читать с помощью либо прочитать (Char [] ...) или ReadLine() в зависимости от того, что вы читаете в.

0

Вы случайно проанализировали HTML, используя встроенный материал XML XML DOM? Из прошлого опыта это может привести к довольно хорошему использованию процессора (и это самая медленная реализация, которую я когда-либо видел, честно). Если это так, вы можете захотеть рассмотреть стороннюю библиотеку для синтаксического анализа XML (например, JDOM).

 Смежные вопросы

  • Нет связанных вопросов^_^