Преобразовать файл (4 Гб) в последовательность байт - C#
Формулировка задачи:
Собственно, стоит задача преобразовать файл и посчитать кол-во 0 и 1. Программа работает, но на файл размером 4Гб уходит около 4-х минут. Можно ли каким-то образом сократить время работы?
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
byte[] chunk;
chunk = br.ReadBytes(chunk_size);
while (chunk.Length > 0)
{
for (int j = 0; j < chunk.Length; ++j)
{
byte num = chunk[j];
for (int i = 7; i >= 0; --i)
{
if ((num & (1 << i)) != 0)
++res_1;
else
++res_0;
}
}
chunk = br.ReadBytes(chunk_size);
}Решение задачи: «Преобразовать файл (4 Гб) в последовательность байт»
textual
Листинг программы
static void B()
{
string path = "";
int chunk_size = 100;
int res_1 = 0;
int res_0 = 0;
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
byte[] chunk;
chunk = br.ReadBytes(chunk_size);
while (chunk.Length > 0)
{
for (int j = 0; j < chunk.Length; ++j)
{
byte num = chunk[j];
res_0 += CountBitTable[num];
res_1 += 8 - CountBitTable[num];
}
chunk = br.ReadBytes(chunk_size);
}
}
static byte[] CountBitTable =
{
0 ,1 ,1 ,2 ,1 ,2 ,2 ,3 ,1 ,2 ,2 ,3 ,2 ,3 ,3 ,4 ,
1 ,2 ,2 ,3 ,2 ,3 ,3 ,4 ,2 ,3 ,3 ,4 ,3 ,4 ,4 ,5 ,
1 ,2 ,2 ,3 ,2 ,3 ,3 ,4 ,2 ,3 ,3 ,4 ,3 ,4 ,4 ,5 ,
2 ,3 ,3 ,4 ,3 ,4 ,4 ,5 ,3 ,4 ,4 ,5 ,4 ,5 ,5 ,6 ,
1 ,2 ,2 ,3 ,2 ,3 ,3 ,4 ,2 ,3 ,3 ,4 ,3 ,4 ,4 ,5 ,
2 ,3 ,3 ,4 ,3 ,4 ,4 ,5 ,3 ,4 ,4 ,5 ,4 ,5 ,5 ,6 ,
2 ,3 ,3 ,4 ,3 ,4 ,4 ,5 ,3 ,4 ,4 ,5 ,4 ,5 ,5 ,6 ,
3 ,4 ,4 ,5 ,4 ,5 ,5 ,6 ,4 ,5 ,5 ,6 ,5 ,6 ,6 ,7 ,
1 ,2 ,2 ,3 ,2 ,3 ,3 ,4 ,2 ,3 ,3 ,4 ,3 ,4 ,4 ,5 ,
2 ,3 ,3 ,4 ,3 ,4 ,4 ,5 ,3 ,4 ,4 ,5 ,4 ,5 ,5 ,6 ,
2 ,3 ,3 ,4 ,3 ,4 ,4 ,5 ,3 ,4 ,4 ,5 ,4 ,5 ,5 ,6 ,
3 ,4 ,4 ,5 ,4 ,5 ,5 ,6 ,4 ,5 ,5 ,6 ,5 ,6 ,6 ,7 ,
2 ,3 ,3 ,4 ,3 ,4 ,4 ,5 ,3 ,4 ,4 ,5 ,4 ,5 ,5 ,6 ,
3 ,4 ,4 ,5 ,4 ,5 ,5 ,6 ,4 ,5 ,5 ,6 ,5 ,6 ,6 ,7 ,
3 ,4 ,4 ,5 ,4 ,5 ,5 ,6 ,4 ,5 ,5 ,6 ,5 ,6 ,6 ,7 ,
4 ,5 ,5 ,6 ,5 ,6 ,6 ,7 ,5 ,6 ,6 ,7 ,6 ,7 ,7 ,8
};