Domanda

Vorrei una risposta da qualcuno che fa in realtà la programmazione in tempo reale in C # o chi realmente capisce i meccanismi interni della lingua.

Lo so che le eccezioni non devono essere utilizzati per gestire l'elaborazione normale, ma solo per rilevare le condizioni di errore. C'è un sacco di discussione su questo argomento.

Mi piacerebbe sapere se c'è qualche fase di esecuzione rallentamento dal fatto di avere un blocco try / catch in atto (che non cattura un'eccezione meno che il programma dovrà finire comunque). Il blocco try / catch è all'interno di una funzione che deve essere richiamato ripetutamente. Ho il sospetto che ci sia solo il costo minimo.

Può il costo quantificabile in termini di cicli di CPU, o altri compiti (stesso costo come punto di moltiplicazione floating), o in un altro modo?

Usiamo Microsoft C # .Net 3.5 sotto Windows XP.

È stato utile?

Soluzione

.NET eccezioni hanno un costo ambientale molto, molto basso se non sono gettati. Avere un blocco try / catch in atto avrà un impatto minimo sulle prestazioni molto. Ho trovato quasi nessun effetto, anche in molto veloce, cicli stretti, ad avere la gestione delle eccezioni in atto.

Tuttavia, le eccezioni in .NET sono molto costosi quando sono gettati. Essi tendono ad essere molto più alto impatto sulle prestazioni se si gettano di molte altre lingue. Ciò è dovuto alla informazioni raccolte stack completo quando si crea l'eccezione, ecc.

Questo è il comportamento opposto ad alcune altre lingue, come pitone, dove la gestione delle eccezioni ha un costo più elevato, ma lancio è in realtà abbastanza performante.

Tuttavia, se siete interessati, vorrei suggerire di profilo la vostra routine, e provarlo voi stessi. Questa è stata la mia esperienza, dopo un po 'di profiling delle prestazioni. Non v'è alcuna sostituzione per la misura nel proprio codebase.

Altri suggerimenti

Buona discussione, con metriche, di implicazioni sulle prestazioni di prova fermo qui.

Tentare / prestazioni blocchi catch ferito quando le eccezioni non sono gettati?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top