Mi sono imbattuto in questo mentre facevo qualche benchmarking.La fusione della struttura dell'oggetto per il confronto nullo non sta causando il pugilato?
bool b;
MyStruct s;
for (int i = 0; i < 10000000; i++)
{
b = (object)s == null;
}
Debug: 200 ms
Stampa: 5 ms
bool b;
MyStruct? s = null;
for (int i = 0; i < 10000000; i++)
{
b = (object)s == null;
}
debug: 800 ms
di uscita: 800 ms
Riesco a capire questo risultato poiché il cast della struttura nullable su object
mi fornisce un tipo in scatola di tale struttura. Ma perché non eseguire il casting da struct s
a object
per eseguire il confronto nullo (come nel primo metodo), si ottiene la stessa prestazione? È che il compilatore sta ottimizzando la chiamata per restituire false
sempre come struct non può essere nullo?
questo codice non viene compilato; Errore 1 Uso della variabile locale non assegnata 's' per il secondo ciclo – Fredou
@Fredou Esatto. Un errore di battitura, infatti. Voglio aggiornare la mia risposta con un po 'di benchmarking - ho trovato un errore nei miei tempi – nawfal
Questo codice, compilato, sembra di essere in esecuzione ciclo vuoto, si dovrebbe pubblicare il tuo codice di riferimento reale, perché non vedo come si può ottenere 7500ms – Fredou