Одна возможная оптимизация будет заключаться в предварительном вычислении вывода для любого входного байта.Таким образом, вы получите:
private static byte[] DecodedBytes = PrecomputeDecodedBytes();
public static byte[] DecodeVOQ(byte[] data)
{
for (int i = 0; i < data.Length; i++)
{
data[i] = DecodedBytes[data[i]];
}
return data;
}
Вполне возможно, что это будет медленнее, чем ваш существующий алгоритм сдвига битов.РЕДАКТИРОВАТЬ: Я только что попытался сравнить это с исходным битовым сдвигом, но с использованием временной локальной переменной: они примерно одинаковы.
Вы тестировали текущую производительность?Это определенно слишком медленно?В частности, загрузка файла практически с любого носителя данных будет намного намного медленнее, чем стоимость декодирования.Я только что попробовал это на своем ноутбуке - для 200 МБ данных это занимает около полсекунды.(РЕДАКТИРОВАТЬ: С ответом Марсело, это займет при полсекунды.) Это действительно слишком медленно?
Будете ли вы рады использовать более одного процессора?В конце концов, это смущающая распараллеливаемая рутина.Если вы используете .NET 4, TPL вполне может сделать это довольно простым.
Я должен еще раз подчеркнуть, что это не «шифрование» - это мягкая форма запутывания, так же, как кодировка base-64 имени пользователя / пароля для базовой HTTP-аутентификации.