Estoy escribiendo algoritmos que funcionan en series de datos numéricos, donde a veces, un valor en la serie debe ser nulo. Sin embargo, debido a que esta aplicación es crítica para el rendimiento, he evitado el uso de tipos anulables. He probado los algoritmos para comparar específicamente el rendimiento del uso de tipos anulables vs tipos no anulables, y en el mejor de los casos, los tipos anulables son 2 veces más lentos, pero a menudo mucho peores.Alternativas a tipos anulables en C#
El tipo de datos más utilizado es el doble, y actualmente la alternativa elegida para nulo es double.NaN. Sin embargo, entiendo que este no es el uso previsto exacto para el valor de NaN, por lo que no estoy seguro de si hay algún problema con esto que no pueda prever y cuál sería la mejor práctica.
Estoy interesado en saber cuáles son las mejores alternativas nulos son para los siguientes tipos de datos, en particular: doble/flotador, decimal, fecha y hora, int/largas (aunque otros son más que bienvenidos)
Edit: Creo que necesito aclarar mis requisitos sobre el rendimiento. Gigs de datos numéricos se procesan a través de estos algoritmos en un momento que toma varias horas. Por lo tanto, aunque la diferencia entre, por ejemplo, 10ms o 20ms suele ser insignificante, en este escenario realmente tiene un impacto significativo en el tiempo empleado.
Alguna información sobre el tipo y la cantidad de datos que espera sería buena. – peterchen
Para más información, mis pruebas muestran que, para el caso en que ninguno de los valores es nulo, los números nulos y mágico son bastante iguales; cuando se trata de un nulo, sí, el enfoque del número mágico es un poco más rápido ... ¿pero es lo suficientemente rápido como para valer la molestia? Todavía es muy, muy rápido - 50M iteraciones en 86ms (número mágico) vs 144ms (Nullable ) en mi máquina ... –
(vea también mi respuesta a su prueba i == null etc; el compilador ya lo hace a través de " levantado "operadores, es probable que lo duplique ...) –