Я ищу совет. Я разработал свои собственные алгоритмы шифрования, потому что мне это нравится, и я могу. Сейчас я ищу новую идею.
Моя идея заключается в объединении ряда моих алгоритмов в один больший. Например, вы вызываете X.Encrypt()
, тогда он использует A.Encrypt()
, B.Encrypt()
, C.Encrypt()
и т. Д. Когда вы выполняете операцию такого рода по одному байту на A
, B
, C
, вызовите метод служебной информации становится убийцей Переход от нескольких мс до нескольких минут. Итак, есть вопросы?
Я просто ищу советы и рекомендации по дизайну кода, чтобы уменьшить проблему.
Спасибо заранее.
Обновление
Пример кода выпуска:
//fast
moduleA.Transform(true, buffer, 0, buffer.Length);
moduleB.Transform(true, buffer, 0, buffer.Length);
//slow
for (int L = 0; L < buffer.Length; )
{
moduleA.Transform(true, buffer, L++, 1);
moduleB.Transform(true, buffer, L++, 1);
}
Я знаю, что эта проблема присуща тому, как ее называют. Моя цель - изменить то, как я это делаю. Я знаю, что внутри методов Transform может быть улучшение. Быстрый работает примерно за 24 секунды, а медленный занимает много минут. Очевидно, что накладные расходы от методов, профилировщик не требуется:)
У меня есть идея, которую я собираюсь попробовать. Я думаю об использовании «режимов работы», в которых я вместо циклического выполнения вне методов Transform я изменяю способ его выполнения внутри каждого метода в соответствии со своими потребностями. Итак, я мог бы выполнять шифрование всех остальных байтов, выполняемое внутри методов Transform и в виде пакета. Я считаю, что это устранит накладные расходы, которые я получаю.
ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ (Решил мою собственную проблему, все еще открытую для идей!)
Увеличение скорости цикла внутри метода Transform сработало!
Я сделал следующее, и похоже, что он работает хорошо:
ITransformationModule moduleA = TransformationFactory.GetModuleInstance("Subspace28");
ITransformationModule moduleB = TransformationFactory.GetModuleInstance("Ataxia");
moduleA.IncrementInterval = 2;
moduleB.IncrementInterval = 2;
moduleA.Transform(true, buffer, 0, buffer.Length);
moduleB.Transform(true, buffer, 1, buffer.Length);
Это работает около 12 секунд для 100 МБ на моей рабочей виртуальной машине. Спасибо всем, кто внес свой вклад! Это была комбинация ответа, которая помогла мне попробовать это таким образом. Я очень ценю вас всех!
Это просто доказательство концепции на данный момент. Это строит навстречу великим вещам! :)