【发布时间】:2010-10-26 23:20:31
【问题描述】:
我正在编写处理一系列数字数据的算法,有时,该系列中的一个值需要为空。但是,由于此应用程序对性能至关重要,因此我避免使用可空类型。我已经对算法进行了性能测试,以专门比较使用可空类型和不可空类型的性能,在最好的情况下,可空类型慢 2 倍,但通常更差。
最常用的数据类型是double,目前选择的null 替代方案是double.NaN。但是我知道这不是 NaN 值的确切预期用途,所以我不确定这是否有任何我无法预见的问题以及最佳实践是什么。
我有兴趣找出以下数据类型的最佳 null 替代方案:double/float、decimal、DateTime、int/long(尽管其他数据类型非常受欢迎)
编辑:我想我需要澄清我对性能的要求。通过这些算法一次处理大量数字数据需要几个小时。因此,虽然例如 10ms 或 20ms 之间的差异通常是微不足道的,但在这种情况下,它确实会对所用时间产生重大影响。
【问题讨论】:
-
一些关于您期望的数据类型和数量的信息会很好。
-
仅供参考 - 我的测试表明,对于两个值都不为 null 的情况, Nullable
和幻数非常相等;当涉及到空值时,是的,幻数方法会更快一些……但是是否足够快(呃)值得带来不便?它仍然非常非常快 - 在我的机器上 86 毫秒(幻数)与 144 毫秒(Nullable )中的 50M 次迭代...... -
(另请参阅我对您的测试的回复 i == null 等;编译器已经通过“提升”运算符执行此操作;您可能会复制它...)
-
@Marc - 我同意你关于性能是否值得的观点,我几乎总是倾向于更好的代码而不是过度优化,因为不清楚代码的成本很容易更高。抱歉,我认为我的问题可能对我的性能需求不够清楚 - 让我先编辑..
-
@Peterchen - 让我也添加这个
标签: c# nullable nan non-nullable