我正在寻求建议。我开发了自己的加密算法,因为我喜欢它并且我可以。现在,我正在尝试一个新的想法。
我的想法涉及将我的算法合并成一个更大的算法。例如,您调用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);
在我的工作虚拟机上运行 100MB 大约需要 12 秒。感谢所有贡献的人!这是一种综合反应,帮助我以这种方式尝试。我非常感谢你们!
这只是目前的概念证明。它正在朝着更大的方向发展!:)