mercoledì 10 giugno 2009

Performance, quanto pesa un try/catch? (.NET)

In questi giorni sono entrato in una discussione dove si è cominciato a valutare il "peso" di un blocco try / catch.
Se un puro blocco try/catch, non usato non costa nulla, utilizzarlo erroneamente ha un peso enorme.
Per dimostrare questo codice ho utilizzato un profiler ed un piccolo codice .NET che conteneva queste due funzioni:



public static int NoCatch(object data)
{
    if (data != null)
    { return (int)data; }
    else
    { return 1; }
}


public static int WithCatch(object data)
{
    try
    {
        return (int)data;
    }
    catch
    {
        return 1;
    }
}





Come si può vedere la funzione WithCatch(object data) utilizza il try per gestire una condizione di errore generica, mentre il primo blocco di codice utilizza un semplice if per evitare l'errore.
Ebbene, quali sono i risultati? Eccoli:


TryCatchTest.Program.TestNoCatch(int64,object) : 0.17

TryCatchTest.Program.TestWithCatch(int64,object) : 491.77

Beh... su 10000 elaborazioni per metodo, quasi il % del tempo è stato utilizzato dalla seconda funzione.

Nessun commento: