Questa potrebbe essere una domanda stupida. So che il compilatore rimuoverà i locali non utilizzati. Ma se scrivo il mio codice come questo:Il compilatore C# rimuoverà il locale inutilizzato se viene assegnata una proprietà?
class MyClass
{
public int SomeProperty
{
get
{
...
}
}
public void SomeFunction()
{
//will this line be removed if i is never used?
int i = SomeProperty;
...
}
}
Mi chiedo che se i
verranno rimossi dal compilatore a causa di ottimizzazione. C'è logica all'interno del getter di SomeProperty
che desidero eseguire. Se i
verrà rimosso, devo cambiare SomeProperty
in una funzione.
Btw, c'è un modo per sapere quale linea verrà ottimizzata dal compilatore?
Starai bene! Compilatore è abbastanza intelligente da sapere – Charleh
Suggerirei che ciò che fa il compilatore non è importante. Questo è un cattivo design. Se chiamare un getter ha importanti effetti collaterali, allora probabilmente non dovrebbe essere un getter. La cosa più probabile che un getter dovrebbe fare è l'inizializzazione pigra di qualcosa, e questo non dovrebbe essere importante, perché se non dovesse accadere, sarà fatto dalla prossima cosa per ottenerlo. Non so cosa stai facendo, ma probabilmente dovrebbe essere refactored nel proprio metodo che può essere chiamato esplicitamente a quel punto. Se non altro, qualcun altro che guarda il codice potrebbe rifarlo come un inutile incarico ... – Chris
Correlato: http://stackoverflow.com/a/2162893/284240 "** Il compilatore C# non fa mai questo tipo di ottimizzazione ** come indicato, fare ciò richiederebbe che il compilatore esegua peer nel codice che viene chiamato e verifichi che il risultato che calcola non cambi durante la durata del codice del callee.Il compilatore C# non lo fa ** Il compilatore JIT potrebbe. ** " –