Ho un'applicazione Java che effettua le seguenti operazioni:
- Lo strumento prende un documento che analizzerà.
- Strumento chiama servizio web esterno
- Lo strumento completa l'esecuzione
Tuttavia, quando ho provato a eseguire questa applicazione in due "ambienti" diversi, c'è un enorme divario tra le prestazioni dello strumento. Nel primo ambiente ci vogliono solo 30 secondi, mentre nel secondo strumento ci sono voluti 40 minuti.
Un ambiente è costituito da quanto segue:
- La macchina su cui viene eseguita l'app.
- La connessione al webservice.
- Il documento di input che verrà analizzato dallo strumento.
Sono stato in costante comunicazione tra le persone nel secondo ambiente (40 minuti di esecuzione), e sono abbastanza perplesso.
Sto cercando di isolare il problema. Per prima cosa, ho chiesto le specifiche della macchina che stanno usando e questo sembra andare bene. Ho quindi chiesto la loro connessione al webservice e va bene anche.
Il documento di input tra i due ambienti (in questo caso) è lo stesso; L'ho mantenuto una variabile costante in modo da avere meno problemi da controllare.
Stranamente, ho chiesto maggiori informazioni e ho scoperto che ci vuole molto tempo con l'analisi del documento di input. Nell'esecuzione di 40 minuti, lo strumento è stato "bloccato" durante l'analisi per 38 minuti. Stavo pensando se fosse il mio codice, ma sono abbastanza confuso dal fatto che il primo ambiente abbia impiegato solo pochi secondi per analizzare lo stesso documento.
La struttura generale del mio parsing è la seguente:
do{
... code here.
do {
... code here.
for{}
}while
}while
for{}
do{
... code here.
}while
code here
sono miscele di istruzioni if e chiamate di funzione (tuttavia viene utilizzata solo una funzione ed è generalmente ifs, no loop).
So che i cicli annidati richiedono un po 'di tempo e questo è peggio di O(n^2)
e so che ho bisogno di lavorare sulla mia ottimizzazione, ma potrebbe davvero essere il codice che causa questo enorme divario tra le prestazioni o c'è un altro fattore questo potrebbe causare questo gap?