Оптимизация кода для повышения производительности программы

У меня есть программа (пакет EOD), которая обрабатывает ежедневные накопленные учетные позиции и обновляет таблицу UPDT.

Программа такая.

  1. Запрос извлекает результаты из различных таблиц в результате соединения и т. д. и сохраняет записи в tempfile.txt.
  2. Записи считываются одна за другой из tempfile.txt, и происходит некоторая серия вычислений.
  3. Для каждой прочитанной записи; после завершения вычислений для этой записи мы вызываем метод update_UPDT(), который фиксирует вычисленные значения в таблице UPDT в базе данных.

ПРИМЕЧАНИЕ. Я хочу повысить производительность программы.
Предложите лучший подход. У меня есть несколько планов.

  1. Используйте Xml вместо tempfile. XML будет легче.
  2. Вместо того, чтобы записывать каждую запись в БД одну за другой, напишите в какую-нибудь временную таблицу или, скажем, xml, а затем выполните массовую публикацию в БД, как только для всех записей будет выполнен весь набор вычислений.

Есть еще предложения?
Или лучше использовать массивы?


person user3346282    schedule 20.04.2015    source источник


Ответы (1)


Прежде всего: измеряйте.

Вы должны иметь очень хорошее представление о том, что замедляет работу, прежде чем вы начнете думать о решениях.

  • Присоедините профилировщик, такой как VisualVM, к вашему процессу и попытайтесь выяснить горячие точки.
  • Распечатайте сведения о GC вашего приложения, чтобы лучше понимание распределения/очистки памяти.
  • Измеряйте базовую производительность системы: загрузку ЦП, дисковый ввод-вывод и сетевой трафик.

Получив всю эту информацию, вы сможете определить области, которые вам нужно улучшить. Тогда и только тогда пора думать, что менять.

Это единственный надежный подход к оптимизации.

person biziclop    schedule 20.04.2015
comment
@Спасибо, Бизклоп. Сначала измерим горячие точки, чтобы найти места улучшения. - person user3346282; 21.04.2015
comment
Я измерил производительность, и оказалось, что метод updateUPDT() сработал почти 12000 раз. Таким образом, каждая из 12000 записей обновляется одна за другой, что кажется узким местом. Теперь вместо того, чтобы записывать все записи одну за другой, я записываю их в BULKXML. После того, как все записи вставлены в массовый xml, мне нужно обновить их в таблице UPDT, чего я хочу добиться с помощью хранимой процедуры. Пожалуйста, помогите мне с хранимой процедурой. Нужно ли мне писать оператор обновления в хранимой процедуре или я должен использовать соединение в хранимой процедуре для обновления значений таблицы из значений xml.???? - person user3346282; 22.04.2015