|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Nov 2010
Messaggi: 211
|
Codice nel try meno performante?
Ciao, esiste qualche differenza nel tempi di esecuzione del codice in un una struttura try? Dovrebbero esserci per forza, perché altrimenti non avrebbe senso inserire solo alcune parti di codice ma tutto il programma e dovrebbe essere previsto di default, senza nemmeno essere esplicitato.
|
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7098
|
Quote:
![]()
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Nov 2010
Messaggi: 211
|
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7098
|
Quote:
![]()
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Se non è necessario il blocco try/catch non ci sono motivi per inserirlo
StackOverflow come sempre ha delle risposte a quasi tutto --> http://stackoverflow.com/questions/1...y-catch-blocks Quasi sicuramente ci sono altre risorse in rete e anche meglio approfondite Qui invece un piccolo bench --> http://stackoverflow.com/questions/1...y-catch-blocks Ps comunque secondo me è proprio una pippa mentale pensare all'overhead del try/catch Ultima modifica di clockover : 08-03-2013 alle 15:10. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7098
|
ovviamente intendevo usarlo dove serve e non tanto per usarlo.
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
In effetti il discorso e' lungo.
Il problema principale e' che in caso di eccezione si deve effettuare il rollback dello stack; pertanto il compilatore deve inserire, per ogni istruzione nel try...catch che possa sollevare eccezioni anche il codice per verificare se e' stata sollevata un'eccezione ed il relativo codice di unroll dello stack. La cosa e' piuttosto pesante, ma puo' anche essere peggio. Soprattutto se si programma in Visual C++ con una versione di Visual Studio non aggiornata. Al tempo (per esempio, VS 2003/2005/...) le eccezioni erano codificate mediante SEH!!! In VS2003 non c'era alternativa, mentre la cosa e' stata messa opzionale nelle versioni successive per mantenere la compatibilita' con il codice precedente. Questo ovviamente ha un grosso impatto, soprattutto sulla correttezza del codice: i crash avrebbero potuto essere benissimo nascosti e tramutati inconsapevolmente in eccezioni, con risultati disastrosi. Infatti MS si e' poi decisa a cambiare a seguito delle lamentele arrivate.
__________________
In God we trust; all others bring data |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Non so com'è messo .NET in generale, ma in particolare in IronPython (Python per .NET) le eccezioni sono decisamente pesanti.
Mentre in Python sono abbastanza leggere, e quindi si usano alacremente.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Immagino che ci sia una buona ottimizzazione nel caso le eccezioni siano sollevate e intercettate nella stessa funzione. Negli altri casi non ho proprio idea. Hai qualche info? (spero non un link con una spataffiata in inglese, preferisco una cosa semplificata - anche non completamente corretta, purche' renda l'idea)
__________________
In God we trust; all others bring data |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Non è veloce di per sé, ma rispetto ad IronPython ci sono differenze abissali (mi pare di un paio di ordini di grandezza).
Informazioni non ne ho. Ho studiato il codice di CPython per quanto riguarda l'implementazione degli opcode che utilizza per inizializzare e finalizzare i blocchi di try/except/finally, e viene eseguito poco codice. Il setup, ad esempio, richiede poche istruzioni. Molte meno rispetto a un'operazione aritmetica, per fare un esempio. La finalizzazione è anch'essa molto semplice, e richiede generalmente poche istruzioni. Soltanto il costrutto with è un po' più complesso, perché lì entra in gioco tutto un discorso sui contesti.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
|
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
In alcuni casi sì. Ad esempio se l'eccezione provoca l'uscita da una o più funzioni/metodi, viene ripulito il loro stack di variabili, e dunque si perde molto più tempo rispetto a un finally (o except) eseguito in un pezzo di codice "semplice" (che non fa chiamate, o che al limite, pur facendole, le funzioni/metodi chiamati non sollevano eccezioni intercettate da quel try).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:35.