通过混淆导致性能损失?

Performance loss through obfuscation?

我读到好的混淆技术不仅可以做一些事情,比如用一些晦涩的东西替换方法名称,而且,例如,用字节数组替换源代码中的字符串,并添加方法将它们转换回原来的字符串。

这可能是导致基于意见的答案的问题之一,但我还是要问这个问题:是否有任何一般概念,如果这种混淆方法是,应用程序会遭受多少性能损失?应用?我想到了一个严重依赖数据库的软件,即代码中存在查询,例如,作为 C# strings 或 StringBuilder 实体。

是的,字符串混淆在微观层面对性能有显着影响。使用混淆,而不是直接内存查找,您必须执行(每次)代码,并且它通常有些复杂,因此在微观性能级别上必然更差。

但是,这笔费用通常无关紧要;数据库调用(或显示 UI 对话框,或将错误发送到日志,或网络流量,或...)所需的时间将比转换字符串的成本高几个数量级.在大多数情况下,转换成本基本上是不可见的。

与所有事情一样,仔细测试是明智的,但如果您在已经 CPU 性能敏感的紧密循环中访问混淆字符串,通常成本仅为 "visible"。