Доброго времени суток.
Есть следующий код:
public class Base64Encoder
{
static Base64Encoder()
{
SixBit2Symbol = Encoding.GetEncoding("ASCII").GetBytes("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=");
}
public static readonly byte[] SixBit2Symbol = null;
public Base64Encoder(Stream stream)
{
_stream = stream;
}
public Base64Encoder(byte[] buffer, int offset, int count)
{
_stream = new MemoryStream(buffer, offset, count);
}
public void Write(Stream stream)
{
int data_size = _buff_size * 3;
int encoded_data_size = _buff_size * 4;
int total_bytes_read = 0;
byte[] data = new byte[data_size];
byte[] encoded_data = new byte[encoded_data_size];
int total_bytes = (int)_stream.Length;
while (total_bytes_read < total_bytes)
{
int data_offset = 0;
int encoded_data_offset = 0;
int bytes_read = _stream.Read(data, 0, data_size);
total_bytes_read += bytes_read;
while (encoded_data_offset < encoded_data_size)
{
if (bytes_read — data_offset >= 3)
{
encoded_data[encoded_data_offset] = SixBit2Symbol[data[data_offset] >> 2];
encoded_data[encoded_data_offset + 1] = SixBit2Symbol[((data[data_offset] & 0x03) << 4) | (data[data_offset + 1] >> 4)];
encoded_data[encoded_data_offset + 2] = SixBit2Symbol[((data[data_offset + 1] & 0x0f) << 2) | (data[data_offset + 2] >> 6)];
encoded_data[encoded_data_offset + 3] = SixBit2Symbol[data[data_offset + 2] & 0x3f];
encoded_data_offset += 4;
data_offset += 3;
}
else
{
int paddingCount = bytes_read — data_offset;
if (paddingCount > 0)
{
if (paddingCount == 1)
{
encoded_data[encoded_data_offset] = SixBit2Symbol[data[data_offset] >> 2];
encoded_data[encoded_data_offset + 1] = SixBit2Symbol[((data[data_offset] & 0x03) << 4) | (data[data_offset + 1] >> 4)];
encoded_data[encoded_data_offset + 2] = SixBit2Symbol[(data[data_offset + 1] & 0x0f) << 2];
encoded_data[encoded_data_offset + 3] = SixBit2Symbol[0x40];
data_offset += 2;
}
else if (paddingCount == 2)
{
encoded_data[encoded_data_offset] = SixBit2Symbol[data[data_offset] >> 2];
encoded_data[encoded_data_offset + 1] = SixBit2Symbol[(data[data_offset] & 0x03) << 4];
encoded_data[encoded_data_offset + 2] = SixBit2Symbol[0x40];
encoded_data[encoded_data_offset + 3] = SixBit2Symbol[0x40];
data_offset += 1;
}
encoded_data_offset += 4;
}
break;
}
}
stream.Write(encoded_data, 0, encoded_data_offset);
}
}
private Stream _stream = null;
private int _buff_size = 1024*6;//16KB
}
Данный код скомпилированный под x64 работает в три раза медленней чем скомпилированный под x86.
Собственно вопрос только один: почему???