ファイルのある領域から別の領域にデータを移動する必要があります。現在、バイトを読み取って書き戻しています。しかし、可能であれば、DMA転送を行う方が速いかどうか疑問に思っています。私は C# を使用していますが、unsafe および p/invoke 関数は受け入れられます。
1 に答える
私が知る限り、通常のファイル ストリームを使用して 1 つのファイルから別のファイルにコピーすることによって、「偶然に」DMA を行っているわけではありません。DMA は一部の場所でバックグラウンドで使用されていますが (たとえば、FileStreams を使用してディスクから RAM に転送するため)、C# で直接ファイルからファイルへのストリーム コピーを処理することはできません。
DMA 自体は非常に複雑で、低水準言語にネイティブです。このドキュメントを参照しています。すべてのコード例は C および asm で記述されているため、C# には直接適用できません。
DMA はマザーボード上の別のチップ (通常は Intel 8237 チップ) であり、プログラマーは I/O ボード間のデータ転送をオフロードできます。DMA は、実際には「Direct Memory Access」の略です。DMA の使用例として、バックグラウンドでサンプルを再生する Sound Blaster の機能があります。CPU は、サウンド カードと DMA をセットアップします。DMA が「行く」ように指示されると、データを RAM からカードにシャベルで移動するだけです。これは CPU の外で行われるため、CPU はデータの転送中に他のことを行うことができます。
別の方法として、OS に転送を処理させることもできます。単純に File.Copy を使用します。