J'écris des algorithmes qui fonctionnent sur des séries de données numériques, où parfois, une valeur dans la série doit être nulle. Cependant, étant donné que cette application est essentielle à la performance, j'ai évité l'utilisation de types nullables. J'ai perf testé les algorithmes pour comparer spécifiquement les performances de l'utilisation de types nullable vs types non nullable, et dans le meilleur des cas, les types nullables sont 2x plus lent, mais souvent bien pire.Alternatives aux types Nullable en C#
Le type de données le plus souvent utilisé est double, et actuellement l'alternative choisie à null est double.NaN. Cependant, je comprends que ce n'est pas l'utilisation exacte prévue pour la valeur NaN, donc je ne suis pas sûr s'il y a des problèmes avec cela que je ne peux pas prévoir et quelle serait la meilleure pratique.
Je suis intéressé à savoir quelles sont les meilleures alternatives nulles sont les types de données suivants en particulier: double/flotteur, décimal, DateTime, int/long (bien que d'autres sont plus que bienvenus)
Edit: I pense que je dois clarifier mes exigences en matière de performance. Les concerts de données numériques sont traités à travers ces algorithmes à un moment qui prend plusieurs heures. Par conséquent, bien que la différence entre, par exemple, 10 ms ou 20 ms soit généralement insignifiante, dans ce scénario, cela a vraiment un impact significatif sur le temps pris.
Certaines informations sur le type et la quantité de données que vous attendez seraient bonnes. – peterchen
Pour info - mes tests montrent que dans le cas où aucune valeur n'est nulle, Nullable et les nombres magiques sont assez égaux; quand un zéro est impliqué, oui, l'approche du nombre magique est un peu plus rapide ... mais est-ce assez rapide pour valoir le désagrément? Il est encore très, très rapide - 50M itérations en 86ms (nombre magique) vs 144ms (Nullable ) sur ma machine ... –
(voir aussi ma réponse à vos tests i == null etc, le compilateur le fait déjà via " levé "opérateurs, vous êtes probablement en train de le dupliquer ...) –