Я пишу алгоритмы, которые работают над серией числовых данных, где иногда значение в серии должно быть нулевым. Однако, поскольку это приложение критично критично, я избежал использования типов с возможностью NULL. Я имею первичную проверку алгоритмов, чтобы конкретно сравнить производительность использования типов с нулевым значением по сравнению с типами, не допускающими нулевое значение, и в наилучшем случае типы с нулевым значением являются 2x медленнее, но часто намного хуже.Альтернативы nullable типам в C#
Тип данных, который чаще всего используется, является двойным, и в настоящее время выбранная альтернатива null равна double.NaN. Однако я понимаю, что это не точное назначение для значения NaN, поэтому я не уверен, есть ли какие-либо проблемы с этим, я не могу предвидеть и какова будет лучшая практика.
Я интересно узнать, что лучшие нулевые альтернативы для следующих типов данных, в частности: двойной/поплавка, десятичный, DateTime, внутр/длинные (хотя другие являются более чем приветствуется)
Edit: я думаю, мне нужно уточнить мои требования к производительности. Концерты числовых данных обрабатываются с помощью этих алгоритмов в то время, которое занимает несколько часов. Поэтому, хотя разница между, например, 10 мс или 20 мс обычно незначителен, в этом случае она действительно оказывает значительное влияние на время.
Некоторая информация о типе и количестве данных, которые вы ожидаете, будет хорошо. – peterchen
Для информации - мои тесты показывают, что для случая, когда ни одно значение не равно нулю, Nullable и магические числа довольно равны; когда задействован нуль, да, подход магического числа немного быстрее ... но достаточно ли (er), чтобы стоить неудобства? Это все еще очень, очень быстро - 50 М итераций в 86 мс (магическое число) против 144 мс (Nullable ) на моей машине ... –
(см. Также мой ответ на ваш тест i == null и т. Д., Компилятор уже делает это через " вы, вероятно, дублируете его ...) –