3 Stimmen

C++ .NET DLL vs C# Managed Code ? (Dateiverschlüsselung AES-128+XTS)

Ich muss eine Windows Mobile-Anwendung (WinMo 6.x - C#) erstellen, die zum Verschlüsseln/Entschlüsseln von Dateien verwendet wird. Es ist jedoch meine Aufgabe, den Verschlüsselungsalgorithmus zu schreiben, der AES-128 zusammen mit XTS als Betriebsmodus verwendet. RijndaelManaged reicht einfach nicht aus :( Viel langsamer als DES und 3DES CryptoServiceProviders :O

Ich weiß, dass alles davon abhängt, wie gut ich den Algorithmus auf effiziente Weise schreiben kann. (Und ja, ich muss es von Grund auf selbst schreiben, aber ich kann mir andere Implementierungen ansehen)

Trotzdem, hat das Schreiben einer C++ .NET DLL zur Erstellung des Verschlüsselungs-/Entschlüsselungsalgorithmus + aller Dateiverwaltung und zur Verwendung dessen von C# aus einen signifikanten Leistungsvorteil gegenüber dem Schreiben des Verschlüsselungsalgorithmus + Dateiverwaltung in vollständig verwaltetem C#-Code?

Wenn ich C++ .NET verwende, um den Verschlüsselungsalgorithmus zu erstellen, sollte ich MFC Smart Device DLL oder ATL verwenden? Was ist der Unterschied und hat die Wahl Auswirkungen? Und kann ich einfach einen Verweis auf die C++ DLL von C# aus hinzufügen oder sollte ich P/Invoke verwenden?

Ich bin mit C# ziemlich kompetent als mit C++, aber die Leistung spielt eine wichtige Rolle, da ich meine Dozenten davon überzeugt habe, dass AES ein sehr effizienter kryptografischer Algorithmus für ressourcenbeschränkte Geräte ist.

Danke vielmals :)

2voto

Venemo Punkte 17747

Eigentlich wird Ihr verwalteter Code beim ersten Start JIT-kompiliert und dann vom Betriebssystem zwischengespeichert, daher gibt es keinen Grund zur Sorge.
Außerdem wird unabhängig von der gewählten Sprache, solange es sich um .NET handelt, zu CIL kompiliert und erfordert JIT-Kompilierung.
Wenn Sie einfachen verwalteten Code in C++ schreiben, könnte das schneller sein, aber nicht unbedingt.

P/Invoke kann Ihren Code verlangsamen, wie Nate gesagt hat.

Sie könnten die gesamte Anwendung entweder in verwaltetem Code oder in nativem Code schreiben, aber wenn alle Algorithmen gleich sind, wird der einzige Leistungsunterschied in der (ersten) Startzeit liegen. Und diese ist normalerweise vernachlässigbar. (Der CLR ist optimiert, um JIT-Kompilierung sehr-sehr schnell durchzuführen.)

Nebenbei bemerkt: Während der JIT-Kompilierung wird der CLR Ihren Code optimieren. Manchmal läuft der JIT-kompilierte Code schneller als einfacher nativer Code, einfach weil der JIT-Compiler besser optimiert.

1voto

Nate Punkte 29413

Das Schreiben eines "verwalteten" Programms wird in C++ oder C# oder VB die gleiche Leistung bringen, da sie alle ohnehin zu IL kompiliert werden.

Ich weiß nicht, aber wenn Sie eine nicht verwaltete C++ Klassenbibliothek schreiben und sie aus einer verwalteten C#-App aufrufen, kann es sein, dass Sie bei der p/invoke einige Leistung einbüßen, aber Ihr Geschwindigkeitszuwachs (durch den Wechsel zu nicht verwaltetem Code) könnte ausreichen, um dies zu rechtfertigen. Es besteht die gleiche Chance, dass die p/invoke möglicherweise jeglichen potenziellen Leistungsgewinn durch den Wechsel zu nicht verwaltetem Code aufheben könnte.

Ich glaube nicht, dass es einen sicheren Weg gibt, dies sicher zu wissen, ohne es auf beiden Wegen zu versuchen und zu testen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X