我可以在 c# 中严格定义“struct Timestamp”数据类型而不是“long”吗?

fil*_*nic 1 c# memory performance struct unix-timestamp

我想在内存中存储时间戳(数十亿个值)。主要操作是读到内存和从内存中读取,不需要 DateTime 特定的方法。为了与其他服务兼容,我想以秒为单位使用 unix 时间戳格式(以避免转换)。

所以,我想使用特殊的数据类型,而不仅仅是long在我的代码中。

我发现我不能为简单的数据类型(如 )“制作别名” long,我可以在程序集之外完全使用它。

因此,我想将 Timestamp 实现为具有单个long字段和一些方法(例如,ToDateTime、某些运算符重载等)的结构,因为结构是“非引用数据类型”并且它们保留了我的记忆。

制作结构是个坏主意吗?

任何使代码成为强类型的替代方法,重新定义Method (long, long)Method (Timestamp, StepCount)

Chr*_*her 5

DateTime 内部使用Ticks作为值。几乎所有其他函数调用和属性都只是对 Ticks 值的重新解释

滴答比秒更精细,达到 7 个数量级。

“一个滴答声代表一百纳秒或百万分之一秒。一毫秒有 10,000 个滴答声,或一秒内有 1000 万个滴答声。

此属性的值表示自公历 0001 年 1 月 1 日午夜 12:00:00 起经过的 100 纳秒间隔数,代表 MinValue。”

然而,内部时钟实际上并不那么精确DateTime.Now可能仅每 ~30 毫秒或更短时间更新一次。要进行精确测量,您必须改用StopWatch 类

当然,对于数十亿的价值,是否有记忆真的成为一个问题。.NET 对象大小、内存和数组大小限制可能会妨碍。将这些值存储在数据库中并只查看列表的一部分可能会更好。在查询中使用重过滤。