我已经对将基本类型的子体序列化所需的时间进行了研究。 如果你已经拥有一个阵列,我就这样做了。 我猜测,与理论相比,一个真正重要的案件有4个 by子,因为当你将一些事情编成册时,这完全是你所需要的。 我已经指出,对什么方法越快的答案取决于你想要将哪类方法分类。 我尝试的方法很少:
- Unsafe reference with an additional buffer overrun check
- GetBytes + consequent Buffer.BulkCopy (This is essentially the same as 1 plus overhead)
- Direct assignment with shift (
m_Bytes[offset] = (byte)(value >> 8)
- Direct assignment with shift and bitwise &
m_Bytes[offset] = (byte)((i >> 8) & 0xFF)
我接受过10米的考验。 下面是微秒的结果。
Long Int Short Byte Float Double
1 29 32 31 30 29 34
2 209 233 220 212 208 228
3 63 24 13 8 24 44
4 72 29 14
你们可以看到,不安全的道路要长、两倍得多(签字文本与签字文本大致相同,因此不在表格中)。 短期/int/float最快的是2/4/4轮班。 幸运的是,最快的是简单的任务。 因此,关于原始问题,派任方式是最好的。 这是这种职能最快的例子:
public static void WriteInt(byte[] buffer, int offset, int value)
{
m_BytesInt[offset] = (byte)(value >> 24);
m_BytesInt[offset + 1] = (byte)(value >> 16);
m_BytesInt[offset + 2] = (byte)(value >> 8);
m_BytesInt[offset + 3] = (byte) value;
}
P.S. 测试是在X64环境中进行的,其编码是按释放方式编成的(运行时为x64)。