Laden...

Performante Umwandlung eines char* in eine C# Struktur

Erstellt von weismat vor 17 Jahren Letzter Beitrag vor 16 Jahren 1.537 Views
W
weismat Themenstarter:in
872 Beiträge seit 2005
vor 17 Jahren
Performante Umwandlung eines char* in eine C# Struktur

Ich bin dabei ein Interface für Realtime-Daten zu schreiben, daß über eine DLL ca. 1000-1500 mal pro Sekunde einen char * liest, der dann in eine C# Datenstruktur umgewandelt und dann weiterverarbeitet werden muß. (Das ganze ersetzt übrigens ein multithreaded Perl Programm, daß die gleichen Daten bisher als ASCII von einem Socket liest und bisher keine Performance-Probleme auf Client Seite hatte).
Ich habe dabei in jedem Fall vor, die DLL und das Umwandeln in eigenen Threads laufen zu lassen.
Wie kann ich am schnellsten die char * in C# Typen umwandeln?
Hat jemand etwas ähnliches mal verglichen? Ich habe vor folgendes zu testen:

  • Unsafe C Code. (Struct vereinbaren und einmal memcpy des char * in den Struct und dann die Elemente der Struktur als Parameter zurückzugeben)
  • MarshalAs
  • ByteConverter
S
1.047 Beiträge seit 2005
vor 16 Jahren

ist c# bzw. .net überhaupt für realtimeoperationen tauglich?

B
1.529 Beiträge seit 2006
vor 16 Jahren

Na ja, Windows selbst ist nicht für Echtzeitoperationen tauglich.

Aber wenn es ein Perl-Script schafft, dann sollte es Maschinencode (in den das .NET-Programm letztendlich kompiliert wird) auch schaffen.

S
8.746 Beiträge seit 2005
vor 16 Jahren

Von Echtzeit war ja auch nicht die Rede. Nur die Last ist hoch.

B
1.529 Beiträge seit 2006
vor 16 Jahren

Nun ja, das Wort "realtime-Daten" klang für mich sehr nach Echtzeit...

Nichtsdestotrotz sollte es gehen.

F
10.010 Beiträge seit 2004
vor 16 Jahren

Also wenn ich mir das hier anschaue, dann kann man in C# schon das eine oder andere machen 😉

http://www.codeproject.com/cs/internet/hssniffer.asp

W
weismat Themenstarter:in
872 Beiträge seit 2005
vor 16 Jahren

Ich werde diese Woche mit der Implementierung anfangen und veranschlage so 2-3 Wochen, da ich nebenbei immer noch andere Dinge machen werde.
Mir ist klar, daß ich in C noch mal etwas herauskitzeln kann, aber es geht immer um die Mischung zwischen Aufwand und Ertrag.
Bei vielen Programmen holt man vor allem Performance über das Design durch Dinge wie z.B. Caching - solche Sachen sind extrem aufwändig in C, wenn man nicht in ein großen Firma mit entsprechenden Frameworks wohnt - insbesondere wenn es z.B. um Thread-Safty geht.
Windows war übrigens lange deutlich besser für Realtime-Geschichten als Solaris, weil die die TCP-Implementierung in Solaris so schlecht war - mit Solaris 10 ist das endlich wieder besser geworden...