繁体   English   中英

如何在C#中存储表-我应该使用哪种数据结构?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM