簡體   English   中英

如何將結構列表寫入 C# 中的文件?

[英]How to write a list of structs into a file in C#?

我將使用List作為數據結構來臨時保存實時數據,我想將其寫入文件。

該程序實時接收數百萬個數據,因此我想盡可能減少延遲和開銷。 起初,我只是組合數據( String )並將其保存在String中(放入列表中),但我發現使用帶有結構的固定列表更好,因為組合字符串的過程很昂貴(在寫入文件之前,臨時保存實時數據時)。

現在我想知道如何有效地將列表中的結構寫入文件。

List<struct_string> struct_list = new List<struct_string>(1000000);


FileStream fileStream = new FileStream(fileName, FileMode.Append, FileAccess.Write);
StreamWriter streamWriter = new StreamWriter(fileStream);

for (int num = 0; list_structs.Count > num; num++)
{
    streamWriter.Write( list_structs[num].string1 + ", " +
                        list_structs[num].string2 + ", " +
                        list_structs[num].string3 + ", " +
                        list_structs[num].string4 + ", " +
                        list_structs[num].string5 + "\r\n");
}

internal struct struct_string
{
    public string string1;
    public string string2;
    public string string3;
    public string string4;
    public string string5;

    public struct_string(string _string1, string _string2, string _string3, string _string4, string _string5)
    {
        string1 = _string1;
        string2 = _string2;
        string3 = _string3;
        string4 = _string4;
        string5 = _string5;
    }
}

這是我最初能想到的,但我認為應該有內置函數或更好的方法來做到這一點。

要將它們讀/寫到二進制文件,請執行以下操作:

定義結構:

[Serializable]
public struct X
{
    public int N {get; set;}
    public string S {get; set;}
}

使用 BinaryFormatter 讀寫它:

string filename = @"c:\temp\list.bin";
var list = new List<X>();
list.Add(new X { N=1, S="No. 1"});
list.Add(new X { N=2, S="No. 2"});
list.Add(new X { N=3, S="No. 3"});
BinaryFormatter formatter = new BinaryFormatter();
using (System.IO.Stream ms = File.OpenWrite(filename))
{
    formatter.Serialize(ms, list);
}

using (FileStream fs = File.Open(filename, FileMode.Open))
{
    object obj = formatter.Deserialize(fs);
    var newlist = (List<X>)obj;
    foreach (X x in newlist)
    {
        Console.Out.WriteLine($"N={x.N}, S={x.S}");
    }
}

該解決方案使用List class 以及X結構是可序列化的。

嘗試使用序列化,你有庫,你有新的 System.Text.Json 在 .NET 核心你有非常好的性能,另一個流行的是 Newtonsoft 標准 .NET。

我知道這不是您問題的直接答案,但我希望它有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM