Ich verstehe, wie Speicherabbilddateien in C# funktionieren, da jede Anforderung von Daten zu einer Kopie führt. Wenn Sie beispielsweise eine große Datenstruktur als Datei beibehalten, führt die Verwendung einer Speicherabbilddatei zu Speicher für die tatsächliche Datei, die dem RAM zugeordnet ist, und einer Kopie, die sich in einem GC-Heapspeicher befindet, nachdem sie aus der Datei gelesen wurde.Ist es möglich, Kopien von Daten zu vermeiden, wenn Speicherabbilddateien in C# verwendet werden?
Ich gehe davon aus, dass Zeiger und GC im Allgemeinen nicht gut miteinander auskommen.
Also, gibt es einen Weg um diese?
Das allgemeine Problem, das ich versuche zu lösen, ist die gemeinsame Nutzung einer großen Datenstruktur zwischen mehreren Prozessen. Die Datenstruktur wird verwendet, um eine kleine Menge von "Fragen" zu beantworten, die als eine einfache API offengelegt werden können (d. H. Im Grunde genommen ein hochspezialisierter Index einer Menge anderer Daten).
Nebenbei macht dies die .NET API für das Szenario "große Datenmengen freigeben" nicht nutzlos?
http://code.msdn.microsoft.com/windowsdesktop/Inter-process-communication-e96e94e7 –
Lesen Sie die gesamte Datei auf einmal in die .NET-Anwendung? Wenn Sie Teile der Speicherabbilddatei nach Bedarf lesen, reservieren Sie eine Menge kleiner Puffer, aber das ist nicht so teuer, wie Sie vielleicht denken. Es mag möglich sein, Kopien zu vermeiden, aber ist der Aufwand, Kopien zu erstellen, wirklich ein Problem? –
Ich habe .NET-Anwendungen, die sehr effektiv "große Datenmengen" auf verschiedene Arten "teilen", einschließlich Speicherabbilddateien. Insbesondere teilt sich eine Suite mehr als 8 Gigabyte, und die Gesamtspeicherauslastung dieser Programme liegt überraschend nahe bei 8 Gigabyte. –