2017-06-29 16 views
0

私は、難解な難読化手法はメソッド名をあいまいなものに置き換えるだけでなく、ソースコード内の文字列をバイト配列に置き換え、それらを元の文字列に変換するメソッドを追加するなどのことも読んでいます。難読化によるパフォーマンスの低下?

これは、意見に基づく回答につながる質問の1つかもしれませんが、とにかく質問します:このような難読化手法が適用された場合にアプリケーションがどの程度のパフォーマンス損失を被るか? C#stringStringBuilderエンティティのように、データベースに大きく依存している、つまりコード内にクエリが存在するソフトウェアがあります。

+1

ニース、downvoteに感謝します。 [Privileges - vote down](https://stackoverflow.com/help/privileges/vote-down)を引用できますか? 「ダウン投票は極端な場合に備えておくべきだ」と述べている。それはコミュニケーションと編集の代用として意味されていません。 "私は必ずダウンワード自体を反対しませんが、少なくとも何が間違っているか教えてください。私が言うことができるのは、Javaを使わずにC#を書いただけなので、あなたはうっかり下降している可能性があります。 – Informagic

答えて

0

はい、文字列の難読化は、マイクロレベルでパフォーマンスに大きな影響を与えます。難読化では、ダイレクトメモリルックアップではなく、毎回実行する必要のあるコードがあり、通常はやや複雑なので、マイクロパフォーマンスレベルでは必ずしも悪化します。

しかし、そのコストは通常​​問題ではありません。データベース呼び出し(またはUIダイアログの表示、ログへのエラーやネットワークトラフィックの送信など)に要する時間は、文字列を変換するコストよりもはるかに大きくなります。ほとんどの場合、変換のコストは本質的に不可視です。

慎重にテストするのは賢明ですが、CPU性能に敏感なタイトなループで難読化された文字列にアクセスする場合、コストは通常​​「可視」に過ぎません。

+0

確かに。難読化は、ロジックに複雑さを追加し、デバッグを妨げる大きなコストがかかるかもしれませんが、最適化のための開発時間を短縮し、そのような作業を難しくします。 – doynax

+0

@doynax私が理解したことは、難読化は、少なくとも自動化された化身では、私がソフトウェアを使い終わってから公開準備が整った後でなければ、コンパイルループに追加するものではないということでした。私があなたを正しく理解していれば、難読化はアルゴリズムのロジックに影響を与え、コードを最適化するための以前の努力を無効にします。これは事実ですか? – Informagic

+1

@Informagic:ほとんどの人は、アプリケーションエラーをデバッグして公開後に使用状況を分析することが求められています。その場合、難読化されたコードの解体に時間がかかることがあります。多くの場合、リリースビルドのデバッグが終了する可能性があります。そして、静的なコード変換を超えて一般に採用されている他のスキームを呪います。例えば、データセットや通信チャンネルは頻繁に暗号化されます。最終的に、実際のコードとデータフローを調べることは、最適化の機会を見つけるための最も効果的な戦略の1つです。そのため、これを難しくすることは問題になります。 – doynax

関連する問題