Ich habe die folgende C-Struktur
%Vor%Ich habe jetzt eine Reihe von Dateien in C mit Tausenden dieser Strukturen erstellt. Ich muss sie mit C # lesen und Geschwindigkeit ist ein Problem.
Ich habe folgendes in C # gemacht
%Vor%Und dann lese ich die Daten aus der Datei mit
%Vor%Das funktioniert einwandfrei und ich kann die Daten einfach aus den Dateien abrufen.
Ich habe gelesen, dass ich Dinge beschleunigen kann, wenn ich anstelle von GCHandle.Alloc / Marshal.PtrToStructure C ++ / CLI oder C # unsafe Code verwende. Ich habe einige Beispiele gefunden, aber sie beziehen sich nur auf Strukturen ohne Arrays fester Größe.
Meine Frage ist, gibt es in meinem speziellen Fall eine schnellere Möglichkeit, Dinge mit C ++ / CLI oder C # unsicherem Code zu tun?
BEARBEITEN
Zusätzliche Leistungsinformationen (ich habe ANTS Performance Profiler 7.4 verwendet):
66% meiner CPU-Zeit werden von Aufrufen von Marshal.PtrToStructure verwendet.
In Bezug auf I / O werden nur 6 von 105ms verwendet, um aus der Datei zu lesen.
In diesem Fall müssen Sie P / Invoke nicht explizit verwenden, da Sie die Struktur nicht zwischen verwaltetem und nativem Code übergeben müssen. Also könntest du das stattdessen tun. Es würde diese unbrauchbare GC-Handle-Zuweisung vermeiden und nur das zuweisen, was benötigt wird.
%Vor%Ich bin mir nicht sicher, dass du viel schneller sein kannst.
Wahrscheinlich möchten Sie nicht verwalteten Code verwenden, was ich tun würde:
Sie werden wahrscheinlich ein gewisses Maß an Geschwindigkeitssteigerung erhalten, aber es ist möglicherweise nicht das, was Sie erwarten.
Es ist mit viel Fiddleness möglich, einige Arrays von Strukturen recht schnell zu lesen, aber da diese Technik blitable Typen benötigt, besteht die einzige Möglichkeit darin, einen festen Puffer von Bytes für den Schlüssel zu erstellen, anstatt a zu verwenden Zeichenfolge.
Wenn Sie das tun, müssen Sie unsicheren Code verwenden, also ist es wahrscheinlich nicht wirklich wert.
Aber nur für die Neugierigen ist das, wie Sie ein super-schnelles schnelles Lesen und Schreiben dieser Strukturen machen können, auf Kosten von unsicheren Code und einer Menge Geige:
%Vor%Tags und Links c# performance struct c++-cli unsafe