是否有一种非分配方式来获取两个LocalDateTime点之间的差异?

时间:2019-10-08 14:30:18

标签: nodatime

我确实理解为什么两个LocalDateTime实例之间的差异表示为句点而不是持续时间,但是我找不到Period是类而不是结构的原因。

我正在帮助移植完成许多工作的代码库:

DateTime t1;
DateTime t2;
TimeSpan diff = t2-t1;


// After port, with a surprising allocation
LocalDateTime t1;
LocalDateTime t2;
Period diff = t2-t1;

似乎有点perf / GC陷阱,我很好奇为什么Period是类而不是结构?

1 个答案:

答案 0 :(得分:2)

Period成为类的主要原因是它会很大-它具有6个long字段和4个int字段。那将是64个字节-大量作为方法参数传递等等。虽然Noda Time中的其他一些结构“相当大”,但它们却不那么大。

但是值得注意的是,这两段代码做了根本不同的事情。相当于TimeSpan的Noda时间不是Period;是Duration,它是一个 结构。如果不需要日历计算,则可能需要考虑将两个LocalDateTime值转换为UTC中的Instant值(或避免使用LocalDateTime开头),然后采用这两个时刻之间的差异。

在内部,有一些非分配的方法来获取日期之间的“天数”,例如...我们可以潜在地公开公开类似的内容,但我认为这样做值得首先进行基准测试以证明这一点非常重要。 (GC非常擅长收集非常临时的对象。当然,它不是免费的-但我认为代码要成为主要因素,必须要做的 other 很少)。 / p>