2009-06-10 8 views
2

ファイルのある領域から別の領域にデータを移動する必要があります。現在、私はバイトを読み、それを書き戻しています。しかし、可能であれば、DMA転送を高速化するのがいいかと思います。私はC#にいるが、安全ではない、p/invoke関数が受け入れられる。DMAを使用したファイル内データコピー

+0

可能な場合、memcpyは自動的にDMA転送を行いますか?もしそうなら、おそらくメモリマップされたファイルを使用してmemcpy(またはmemmove)を呼び出すことができます。 – Fantius

+0

または私は既にDMA転送をしていると思いますが、それはわかりません。この場合でも、私は1つではなく2つの転送を行う必要があります - データを読み込んでそれを書き込むことです。 1つの転送にする方法はありますか? – Fantius

答えて

3

普通のファイルストリームを使用してあるファイルから別のファイルにコピーすることによって '事故によって' DMAを実行していません。 DMAは、いくつかの場所でバックグラウンドで使用されています(たとえば、FileStreamを使用してディスクからRAMに転送するなど)が、C#で直接ファイルからファイルへのストリームのコピーを処理できません。

DMA自体はかなり複雑で低レベル言語のネイティブです。私はthis documentを指しています。すべてのコード例はCとasmにありますので、C#には直接適用できません。

DMAは、マザーボード上の別のチップであるあなた(プログラマ)はI/Oボード間のデータ転送 の負荷を軽減することができます(通常はインテル8237チップ があります)。 DMAは実際には「ダイレクトメモリアクセス」の略です。 DMAの使用例は、バックグラウンドで サンプルを再生するSound Blasterの能力です。 CPUは、サウンドカードとDMAを設定します。 DMAに「go」と指示すると、RAMからのデータを単にシャッフルして というカードにします。これはオフCPUで行われるため、CPUはデータ転送中に の他の処理を実行できます。

DMAは、ポートによってアクセスされるチャネルシステムを使用します。通常、これを行うにはasmを使用します。たぶんあなたは有用な情報hereまたはhereを見つけることができます。

代わりに、OSに転送を処理させることもできます。単にFile.Copyを使用します。

関連する問題