簡體   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