2017-06-29 4 views
0

Ich habe gelesen, dass gute Verschleierungstechniken nicht nur Dinge wie das Ersetzen von Methodennamen durch etwas Obskures ersetzen, sondern zum Beispiel auch Strings im Quellcode durch Bytearrays ersetzen und Methoden hinzufügen, um diese zurück in die ursprünglichen Strings zu konvertieren.Leistungsverlust durch Verschleierung?

Dies könnte eine dieser Fragen sein, die zu meinungsbasierten Antworten führen, aber ich werde es trotzdem fragen: Gibt es eine allgemeine Vorstellung davon, wie viel Leistungsverlust eine Anwendung erleiden würde, wenn eine solche Verschleierung angewendet wird ? Ich habe eine Software im Auge, die stark an eine Datenbank angelehnt ist, d. H. Abfragen existieren in dem Code, zum Beispiel als C# string s oder StringBuilder Entitäten.

+1

Schön, danke für den Downvote. Darf ich [Privileges - vote down] (https://stackoverflow.com/help/privileges/vote-down) zitieren? Es heißt: "Down-Voting sollte für extreme Fälle reserviert werden. Es ist nicht als Ersatz für Kommunikation und Editing gedacht. "Ich muss dem Downvote per se nicht unbedingt widersprechen, aber sage mir zumindest, was falsch ist. Nach allem, was ich sagen kann, haben Sie wahrscheinlich nur eine Down-Version, weil ich C# und nicht Java geschrieben habe. – Informagic

Antwort

0

Ja, String-Verschleierung hat eine signifikante Auswirkung auf die Leistung, auf der Mikro-Ebene. Mit Verschleierung, anstatt einer direkten Speicher-Lookup haben Sie Code, der (jedes Mal) ausgeführt werden muss, und es ist in der Regel etwas kompliziert, so dass es auf der Micro-Performance-Ebene notwendigerweise viel schlechter ist.

Diese Kosten sind jedoch normalerweise egal; Die für den Datenbankaufruf erforderliche Zeit (oder das Anzeigen des Benutzeroberflächen-Dialogs oder das Senden des Fehlers an ein Protokoll oder Netzwerkverkehr oder ...) wird um Größenordnungen höher sein als die Kosten für die Konvertierung der Zeichenfolge. In den meisten Fällen sind die Kosten der Konvertierung im Wesentlichen unsichtbar. Wie bei allem ist sorgfältiges Testen sinnvoll, aber normalerweise sind die Kosten nur "sichtbar", wenn Sie auf verschleierte Strings in einer engen Schleife zugreifen, die bereits CPU-Leistung-empfindlich ist.

+0

In der Tat. Obwohl die Verschleierung erhebliche Kosten mit sich bringen kann, da sie der Logik Komplexität hinzufügt und das Debugging erschwert, bleibt weniger Entwicklerzeit für die Optimierung übrig und erschwert diese Arbeit. – doynax

+0

@doynax Mein Verständnis war, dass Verschleierung, zumindest in seiner automatischen Inkarnation, etwas wäre, das ich in der Kompilationsschleife erst hinzufügen würde, nachdem ich mit der Software fertig bin und sie zur Veröffentlichung bereit habe. Wenn ich Sie richtig verstehe, würde die Verschleierung meine algorithmische Logik in einer Weise beeinflussen, die bisherige Anstrengungen zur Optimierung des Codes zunichte machen würde. Ist das wirklich der Fall? – Informagic

+1

@Informagic: Leider sind die meisten von uns aufgerufen, um Anwendungsfehler zu debuggen und die Nutzung nach der Veröffentlichung zu analysieren, zu welcher Zeit Sie möglicherweise Zeit damit verbringen, verschleierten Code zu entwirren. Aus dem gleichen Grund wie Sie Debugging Release Builds enden können. Und natürlich gibt es neben der statischen Code-Übersetzung noch andere gängige Schemata, zum Beispiel werden Datasets und Kommunikationskanäle häufig verschlüsselt. Am Ende des Tages ist das Studium von echtem Code- und Datenfluss eine der effektivsten Strategien, um Optimierungsmöglichkeiten zu entdecken. Schwieriger zu sein ist problematisch. – doynax