使用DMA进行文件内数据复制

时间:2009-06-10 13:22:47

标签: c# file dma

我需要将一些数据从文件的一个区域移动到另一个区域。目前,我正在读取字节并将其写回。但我想知道如果可能的话,进行DMA传输会更快。我在C#中,但不安全和p / invoke函数是可以接受的。

1 个答案:

答案 0 :(得分:3)

据我所知,通过使用通常的文件流从一个文件复制到另一个文件,意外地“进行DMA”。 DMA在某些地方在后台使用(例如,通过使用FileStreams从磁盘传输到RAM),但它无法在C#中处理直接的文件到文件流复制。

DMA本身非常复杂,是低级语言的原生。我指的是this document。所有代码示例都在C和asm中,因此它不能直接应用于C#。

  

DMA是主板上的另一个芯片(通常是英特尔8237)   芯片)允许您(程序员)卸载数据传输   I / O板之间。 DMA实际上代表“直接内存访问”。一个   DMA使用的例子是Sound Blaster的播放能力   样品在后台。 CPU设置声卡和DMA。   当DMA被告知'去'时,它只是将RAM中的数据铲起来   卡片。由于这是在CPU外完成的,因此CPU可以做其他事情   正在传输数据。

DMA使用端口访问的通道系统。通常,您使用asm来执行此操作。也许您可以找到一些有用的信息herehere

另一种方法是让操作系统处理传输:只需使用File.Copy。