如何在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;
    }
}

这是我最初想到的,但是我认为应该有内置函数或更好的方法来实现此目的。

xuce198523 回答:如何在C#中将结构列表写入文件?

要将它们读/写到二进制文件,请执行以下操作:

定义结构:

[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类以及X结构是可序列化的。

,

尝试使用序列化代替,您有相应的库,并且.NET Core中新的System.Text.Json确实具有出色的性能,另一个流行的是标准.NET的Newtonsoft。

我知道这不是您所提问题的直接答案,但希望对您有所帮助。

本文链接:https://www.f2er.com/3136973.html

大家都在问