Edit2:
Полагаю, если число байтов, которое нужно преобразовать в int, имеет переменную длину (что кажется странным), я предлагаю сделать это следующим образом:
private string bytesToIntParse(byte[] recordData, int offset, int length)
{
long result = 0;
for (int i = 0; i < length; ++i)
{
result |= ((long)recordData[i + offset]) << (i * 8);
}
return result.ToString();
}
Теперь у вас есть одна функция, нет Buffer.BlockCopy, и она поддерживает любую длину.
Edit1:
Вы можете использовать небезопасный код, такой как:
// I don't think you need to specify a length parameter, since int32 is always 4 bytes
private string byteToIntParse(byte[] recordData, int offset, int length)
{
unsafe
{
fixed (byte* p = &recordData[offset])
{
// This result will differ on little and big endian architectures.
return (*(int*)p).ToString();
}
}
}
Но это то, что BitConverter делает внутри, поэтому я не думаю, что вы получите какую-либо производительность
Почему вы копируете байты в workingSet
? Вы могли бы просто:
return BitConverter.ToInt32(recordData, offset).ToString()
Полагаю, это повышает производительность, поскольку вам не нужно каждый раз вызывать Buffer.BlockCopy: P