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