我有14400360個結構陣列,每個結構由3個字節的數據。 序列化固定大小的緩衝器
[ProtoContract]
struct A
{
[ProtoMember(1)]
private unsafe fixed byte[3] data;
}
不幸的是protobuf網2.0.0.668不能序列固定大小的緩衝區,並在系列化拋出異常。 (如「不爲串行FixedArray」的東西)我想答案是解釋here。
我目前的解決方法是在固定陣列分成三個獨立的字節和固定的佈局。
[ProtoContract]
[StructLayout(LayoutKind.Explicit, Size = 3, CharSet = CharSet.Ansi)]
struct A
{
[ProtoMember(1)]
[FieldOffset(0)]
private byte data;
[ProtoMember(2)]
[FieldOffset(1)]
private byte data1;
[ProtoMember(3)]
[FieldOffset(2)]
private byte data2;
}
問:有一些黑魔法黑客或只是簡單的技巧,我錯過了,所以我沒有手動拆分數組?
當測量含有此陣列的對象的堆的使用情況,它佔用43201160個字節或每結構僅有3個字節。 磁盤上的序列化文件佔用72,814,584字節或每個結構約5.05字節。
問:什麼佔用了每個結構這些額外的2個字節? 我還沒有嘗試過,但也許序列化的大小可以通過製作一個3 * 14,400,360字節的數組來減少呢? (超出不得已)
編輯:更正 序列化文件的大小爲126246995個字節或每結構8.8字節而不是原來報每結構5.5個字節。
編輯:後續 從this answer使用單個成員惡作劇使文件大小降至90952228個字節或每結構6.3個字節。