Abbiamo già parlato del lavoro legato alla performance di Radical, i punti toccati non sono stati poi molti, il voro nocciolo della questione giro intorno ad un signore che si chiama “Ensure” e che vi permette di scrivere qualcosa del tipo:
class MyClass
{
public void Foo( String arg )
{
Ensure.That( arg ).Named( () => arg ).IsNotNullNorEmpty();
}
}
A runtime quello che succede è che se “arg” è null o empty vi beccate una simpatica eccezione con tutti i dettagli del caso, compreso:
- classe;
- metodo;
- riga;
- nome del file sorgente;
dove si è schiantato. Per fare tutto ciò bisogna avere a che fare con un paio di signori noti come StackTrace e StackFrame che hanno lo spiacevole difetto di essere onerosi.
Abbiamo quindi deciso di cambiare approccio e di abilitare quella funzionalità in Radical solo se Radical stesso è compilato in “debug”, altrimenti se è compilato in “release” l’eccezione conterrà tutte le informazioni tranne i dettagli derivati da StackTrace e StackFrame.
Questo comportamento è comunque controllabile all’avvio dell’applicazione:
public partial class App : Application
{
public App()
{
Ensure.SourceInfoLoadStrategy = SourceInfoLoadStrategy.Skip;
}
}
Dove i valori possibili di SourceInfoLoadStrategy possono essere:
- Load: carica sempre le informazioni, è il comportamento di default se Radical è compilato in “debug”;
- Skip: non carica mai le informazioni, è il comportamento di default se Radical è compilato in “release”
- LazyLoad: cerca di posticipare il più possibile il caricamento delle informazioni con lo scopo di ridurre l’impatto sulle prestazioni;
.m