Condividi tramite


DA0007: Evitare di utilizzare eccezioni per il flusso di controllo

ID regola

DA0007

Category

Utilizzo di .NET Framework

Metodi di profilatura

Tutto

Messaggio

Rilevato un elevato numero costante di eccezioni. È opportuno considerare la possibilità di ridurre l'utilizzo di eccezioni nella logica di programma.

Tipo messaggio

Avviso

Quando si esegue la profilatura tramite i metodi di campionamento, memoria .NET o conflitto di risorse, è necessario raccogliere almeno 25 campioni per attivare questa regola.

Causa

Nei dati di profilatura sono stati chiamati gestori di eccezioni .NET Framework con una frequenza elevata. Considerare l'utilizzo di un'altra logica del flusso di controllo per ridurre il numero di eccezioni generate.

Descrizione della regola

Benché utilizzare gestori di eccezioni per rilevare gli errori e gli altri eventi che compromettono l'esecuzione del programma sia una procedura consigliata, l'utilizzo di un gestore di eccezioni come parte della normale logica di esecuzione del programma può essere costoso e deve essere evitato. Nella maggior parte dei casi, le eccezioni devono essere utilizzate solo in circostanze eccezionali e impreviste. Le eccezioni non devono essere utilizzate per restituire valori come parte del flusso di programma normale. In molti casi per evitare la generazione di eccezioni è possibile convalidare i valori e utilizzare logica condizionale per arrestare l'esecuzione delle istruzioni che provocano il problema.

Per ulteriori informazioni, vedere la sezione Gestione delle eccezioni (la pagina potrebbe essere in inglese) di Chapter 5 — Improving Managed Code Performance nel volume Improving .NET Application Performance and Scalability della libreria Microsoft Patterns and Practices di MSDN.

Come esaminare un avviso

Fare doppio clic sul messaggio nella finestra Elenco errori per passare alla visualizzazione Contrassegni. Trovare la colonna che contiene le misure Eccezioni CLR .NET (@ ProcessInstance) \ Eccezioni/sec. Determinare se esistono fasi specifiche dell'esecuzione del programma dove la gestione delle eccezioni risulta più frequente rispetto alle altre fasi. Utilizzando un profilo di campionamento, provare a identificare le istruzioni throw e i blocchi try/catch che generano eccezioni frequenti. Se necessario, aggiungere logica ai blocchi catch per individuare le eccezioni che vengono gestite più spesso. Dove possibile, sostituire le istruzioni throw o i blocchi catch eseguiti frequentemente con una logica di controllo di flusso o un codice di convalida a bassa complessità.

Ad esempio, se si rileva che l'applicazione sta gestendo eccezioni DivideByZeroException frequenti, per migliorare le prestazioni dell'applicazione è possibile aggiungere logica al programma per verificare la presenza di denominatori con valori zero.