[英]How to store tables in C# - What kind of data structure should I use?
一般情况如下:
我从外部设备获取值,并且必须与它们一起存储时间戳。 我想以某种有效的方式存储信息,以便在处理所有内容时使我的生活更轻松。
作为一个简单的解决方案,我创建了一个存储一行的类:
public class X
{
public DateTime timestamp;
public double value1;
public double value2;
}
然后,我根据这些对象创建一个列表。
您能否显示一种更好的处理此类数据的方法?
谢谢!
尽管我会使用属性而不是公共字段,但这对我来说似乎完全合理。 如果要从外部设备获取值,则可能要考虑使类型不可变-将所有值传递到构造函数中并将它们存储在只读字段中。 当类型不可变时,我发现对我的代码进行推理更容易:)
您关心哪种效率? 您将拥有多少这些价值? 即使这里没有太多值,我仍可能会使用类而不是结构...我很少创建自己的结构。 再说一次,我只是发现类易于推理(例如,不必担心装箱。)而且,这感觉就像是“一组值”,而不是一个通常用于结构(数字等)的不可分值。 。 它只是不觉得自己像一个struct给我。
每个对象都会产生开销,但是除非您有充分的理由,否则我不会担心。
编辑:这似乎很重要,但是给所有有意义的名称。 例如:
public class DeviceReading
{
private readonly DateTime timeStamp;
public DateTime TimeStamp { get { return timeStamp; } }
private readonly double temperature;
public double Temperature { get { return temperature; } }
private readonly double airPressure;
public double AirPressure { get { return airPressure; } }
public DeviceReading (DateTime timeStamp,
double temperature,
double airPressure)
{
this.timeStamp = timeStamp;
this.temperature = temperature;
this.airPressure = airPressure;
}
}
我怀疑您还是会这样做,但我只是想确保自己可以:)
还有几件事要考虑:
假设您使用的是.NET的最新版本,则可能要使用DateTimeOffset
而不是DateTime
。 好处是DateTiemOffset
明确表示一个时间点,而DateTime
可以是UTC,本地或未指定。
根据您要获取的读数类型(以及读数的传达方式),您可能希望使用decimal
而不是double
。 可能不是温度和气压(或任何其他“物理”值)的原因,但是如果您要处理诸如金钱之类的人工值,则decimal
是您的朋友。 鉴于这是从设备读取的,您可能正在处理物理量,但我认为值得一提。
为了处理阅读材料,您真的很想研究LINQ。 这很可爱:)
此类型足够小,假设它是不可变的,您可能要考虑使用结构。 这将减少垃圾收集堆上的负载。
您到底想优化什么? 内存占用量? 阅读表现? 您将如何读取数据?
如果您打算将多个X
对象放入一个数组中,建议您将其构造为一个struct
因为它仅包含一些“纯旧数据”项(无对象)。 除此之外,这似乎是处理数据的一种直接方法。
您已经做的方式没有什么特别的错误。 (尽管正如其他人所建议的那样,您应该将字段设为私有,而应使用公共属性)
通常,决定使用哪种存储结构的最佳方法是考虑如何使用数据。
例如,如果您知道需要按某种顺序处理数据,请考虑使用SortedList。 如果您知道需要直接从某种键或索引访问数据,请使用字典。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.