Autor Beitrag
gammaomega
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 02.01.08 12:25 
Hallo!

Ein Programm muss sehr viele (>1000) Binärdateien einlesen und aus den Daten eine entsprechende OO-Datenstruktur erstellen.
Es handelt sich um ein C#-Programm, welches auch einwandfrei funktioniert. Trotz aller Optimierungsbemühungen dauert das Einlesen jeder Datei aber immer (je nach Größe) 1 bis 3 Sekunden, was für 1000 Dateien natürlich viel Zeit ist.

Ein Freund meinte nun ich solle den Code nicht-gemanaged ausführen um das Ganze zu beschleunigen.
Was meint ihr dazu?
Geht das? Würde das was bringen?
Und wenn ja: Wie stelle ich das an?
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Mi 02.01.08 14:55 
Managed Code ist eigentlich immer langsamer als Unmanaged Code. Wie viel, das hängt sehr stark vom Anwendungsgebiet ab. Meistens ist aber die CLR nicht sehr viel langsamer als nativer Code. Wenn du Unmanaged Code schreiben möchtest musst du auf eine andere Programmiersprache zurückgreifen, C# wird immer zu Managed Code kompiliert.
Du kannst natürlich hier auch den Code von deinem Programm posten, dann könnte man gucken was man optimieren kann.
gammaomega Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 02.01.08 15:16 
Auch wenn meine letzten C++ Tätigkeiten ein paar Jahre her sind würde ich mir wohl zutrauchen den Code von C# nach C++ zu konvertieren.
Das ist wohl weniger das Problem.

Aber wie sähe das in der Praxis aus?
Ich hätte dann eine DLL in C++ und würde diese von C# aus ansprechen, oder?

Können über diese Schnittstelle nur Primitive (int, string, ..) übergeben werden oder auch komplexe Objekte?
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Mi 02.01.08 16:20 
Wenn du den Code eins zu eins portierst, dann wird da kaum Geschwindigkeit herauszubringen sein. Du musst dann schon die Vorteile von Unmanaged Code ausnutzen, z.B. Pointerarithmetik.
user profile icongammaomega hat folgendes geschrieben:
Können über diese Schnittstelle nur Primitive (int, string, ..) übergeben werden oder auch komplexe Objekte?

Beides.
gammaomega Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 02.01.08 16:25 
Ok, dann vergessen wir das :-)
Danke trotzdem.