Основная причина, по которой Period
является классом, заключается в том, что он будет огромным - он имеет 6 long
полей и 4 int
полей. Это будет 64 байта - это очень много для передачи в качестве аргумента метода и т. Д. Хотя некоторые другие структуры в Noda Time "довольно большие", они не , что большие.
Но этоСтоит отметить, что две части кода делают совершенно разные вещи. Время Noda, эквивалентное TimeSpan
, не Period
;это Duration
, что является структурой. Если вам не нужен календарный расчет, вы можете рассмотреть возможность преобразования двух значений LocalDateTime
в значения Instant
в формате UTC (или избегать использования LocalDateTime
для начала), а затем взять разницу между этими двумя моментами.
Внутренне, есть нераспределительные способы получения «количества дней» между датами, например ... мы могли бы потенциально публично раскрыть что-то подобное, но я думаю, что этостоило бы сначала сделать бенчмаркинг, чтобы доказать, что это действительно важно. (GC довольно хорошо собирает очень временные объекты. Конечно, это не бесплатно - но я думаю, что код должен был бы делать очень мало других , чем это, чтобы он стал основным фактором.)