2009-06-10 110 views
2

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

+0

如果memcpy能够自动执行DMA传输吗?如果是这样,也许我可以使用内存映射文件并调用memcpy(或memmove)。 – Fantius 2009-06-10 13:33:16

回答

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。