我的代码像这样:
[Serializable]
[StructLayout(LayoutKind.Sequential,Pack=1)]
struct Foo
{
public byte Bar;
public Foo(byte b){Bar=b;}
}
public static void Main (string[] args)
{
Foo[] arr = new Foo[1000];
for (int i = 0; i < 1000; i++) {
arr[i]=new Foo(42);
}
var fmt = new BinaryFormatter();
using(FileStream f= File.Create("test.bin")){
fmt.Serialize(f,arr);
}
Console.WriteLine (new FileInfo("test.bin").Length);
}
结果bin文件大小为10095字节。为什么我的
Foo
结构体会占用这么多字节?每个结构体的9个字节开销是什么意思?PS:我正在编写一个汉字查找库(大约涉及70000个字符的信息),db4o或其他可嵌入的数据库(如sqlite)有点臃肿。我想将所有信息存储在纯字符串格式中,这是最友好的内存方式,但灵活性较差。我想将信息保存在列表中,并将它们作为二进制序列化存储到档案中,我选择了DotNetZip进行归档。但序列化开销是一个意外的障碍。更好的序列化解决方案将是不错的,否则我必须以纯字符串格式保存信息并通过硬编码进行解析。