Ich bin im Begriff, Tonnen von Binärdateien mit jeweils 1000 oder mehr Datensätze zu lesen. Neue Dateien werden ständig hinzugefügt, daher schreibe ich einen Windows-Dienst, um die Verzeichnisse zu überwachen und neue Dateien zu verarbeiten, sobald sie empfangen werden. Die Dateien wurden mit einem C++ Programm erstellt. Ich habe die Strukturdefinitionen in C# neu erstellt und kann die Daten gut lesen, aber ich bin besorgt, dass die Art und Weise, wie ich es tue, schließlich meine Anwendung umbringt.Was ist der effizienteste Weg, C++ - Strukturen zu C# zu marshallen?
using (BinaryReader br = new BinaryReader(File.Open("myfile.bin", FileMode.Open)))
{
long pos = 0L;
long length = br.BaseStream.Length;
CPP_STRUCT_DEF record;
byte[] buffer = new byte[Marshal.SizeOf(typeof(CPP_STRUCT_DEF))];
GCHandle pin;
while (pos < length)
{
buffer = br.ReadBytes(buffer.Length);
pin = GCHandle.Alloc(buffer, GCHandleType.Pinned);
record = (CPP_STRUCT_DEF)Marshal.PtrToStructure(pin.AddrOfPinnedObject(), typeof(CPP_STRUCT_DEF));
pin.Free();
pos += buffer.Length;
/* Do stuff with my record */
}
}
Ich glaube nicht, ich brauche GCHandle zu verwenden, weil ich eigentlich nicht mit dem C++ App in Verbindung stehe, wird alles wird von verwalteten Code getan, aber ich weiß nicht, ein alternatives Verfahren.
Danke, das articlt zeigt nicht nur Unterschiede zwischen den Dateihandler, sondern gibt auch ein schönes Beispiel für die Konvertierung von Byte zu Struktur. –