Ich muss einige Daten aus einem Bereich einer Datei in einen anderen verschieben. Momentan lese ich die Bytes und schreibe sie zurück. Aber ich frage mich, ob eine DMA-Übertragung schneller wäre, wenn es möglich ist. Ich bin in C#, aber unsichere und p/invoke-Funktionen sind akzeptabel.In-Datei-Daten kopieren mit DMA
Antwort
Sie sind, soweit ich das beurteilen kann, nicht tun DMA 'durch Zufall' mit den üblichen Datei Streams von einer Datei in eine andere zu kopieren. DMA wird an einigen Stellen im Hintergrund verwendet (z. B. zur Übertragung von der Festplatte auf den Arbeitsspeicher mithilfe von FileStreams), kann jedoch keine direkte Datei-zu-Datei-Stream-Kopie in C# verarbeiten.
DMA selbst ist ziemlich komplex und nativ für Low-Level-Sprachen. Ich beziehe mich auf this document. Alle Codebeispiele sind in C und asm, also nicht direkt auf C# anwendbar.
Der DMA ein weiterer Chip auf dem Motherboard ist (in der Regel ist ein Intel 8237 Chip), die Sie (der Programmierer) ermöglichen Datenübertragungen abzuladen zwischen I/O-Karten. DMA steht eigentlich für "Direct Memory Access". Ein Beispiel für die DMA-Nutzung wäre die Fähigkeit des Sound Blasters, Samples im Hintergrund abzuspielen. Die CPU richtet die Soundkarte und den DMA ein. Wenn der DMA angewiesen wird zu "gehen", schaufelt er einfach die Daten aus dem RAM zu der Karte. Da dies außerhalb der CPU erfolgt, kann die CPU während der Übertragung der Daten andere Dinge tun .
DMA verwendet ein Kanalsystem, auf das über Ports zugegriffen wird. Normalerweise verwenden Sie asm, um dies zu tun. Vielleicht finden Sie einige hilfreiche Informationen here oder here.
Eine Alternative könnte sein, dass das Betriebssystem die Übertragung übernimmt: Verwenden Sie einfach File.Copy.
- 1. Kennt DMA NUMA-Knoten?
- 2. Zuweisen eines großen DMA-Puffers
- 3. DMA-Übertragung RAM-to-RAM
- 4. Cachekohärenzprobleme in einem DMA-Kontext
- 5. Was ist DMA-Mapping und DMA-Engine im Kontext von Linux-Kernel?
- 6. Große PCIe DMA Linux x86-64
- 7. Programmierte E/A im Vergleich zu DMA
- 8. Was bedeutet es mit einem "6-Kanal-DMA"?
- 9. Kann keine Sinuswelle mit DAC und DMA auf STM32 erzeugen
- 10. Reservieren von Speicher für DMA-Verwendung
- 11. Effiziente Linux-Sockets (DMA/Zero-Copy)
- 12. STM32F4 Behandlung von Peripheriefehler während der DMA-Übertragung (RX)
- 13. DMA PCIe lesen Übertragung von PC zu FPGA
- 14. Emacs kopieren mit Regex
- 15. Kopieren-Einfügen mit Javascript
- 16. Verzeichnis mit Qt kopieren
- 17. kopieren Algorithmus mit ifstream
- 18. Kopieren Einfügen mit Javascript
- 19. Kopieren Konstruktor mit Zeigern
- 20. Wie die Warteschlange in DragonFly E-Mail-Agenten (DMA)
- 21. Direkte SPU zu SPU DMA-Anfragen auf dem Cell Processor?
- 22. SIMD Anweisungen mit Bedingung kopieren
- 23. Windows-Datei kopieren mit http
- 24. Kopieren einer Datei mit Batch
- 25. Kopieren S3 Benutzermetadaten mit Datei
- 26. Kopieren gesamte Arbeitsblatt mit openpyxl
- 27. Kopieren Konstruktor mit mmap Adresse
- 28. Kopieren Ordner Inhalt mit VBScript
- 29. Kopieren von Dateien mit MsBuild
- 30. copy_backward oder kopieren mit reverse_iterators?
MEMPPY automatisch eine DMA-Übertragung, wenn es möglich ist? Wenn das so ist, kann ich vielleicht Speicherkarten verwenden und memcpy (oder memmove) aufrufen. – Fantius
Oder mache ich wahrscheinlich schon DMA-Übertragungen und ich weiß es einfach nicht? Selbst wenn dies der Fall ist, muss ich zwei Übertragungen statt einer durchführen - um die Daten zu lesen und sie dann zu schreiben. Gibt es eine Möglichkeit, einen Transfer zu machen? – Fantius