Javaではjava.nio
ライブラリを使用し、FileChannel.transferTo()
とFileChannel.transferFrom()
を使用します。 (特に)C#で何か類似しているのですか、どこからunamanaged .dllをロードする必要がありますか?この場合、Googleは役に立ちませんでした。.NETでゼロコピーを実行する方法はありますか?
編集:私は.NET 3.5をターゲットにしていることに注意してください。
Javaではjava.nio
ライブラリを使用し、FileChannel.transferTo()
とFileChannel.transferFrom()
を使用します。 (特に)C#で何か類似しているのですか、どこからunamanaged .dllをロードする必要がありますか?この場合、Googleは役に立ちませんでした。.NETでゼロコピーを実行する方法はありますか?
編集:私は.NET 3.5をターゲットにしていることに注意してください。
最高の性能を発揮するのはUnmanagedMemoryStreamだと思います。
このクラスは、既存のストリームベースのモデルを使用して管理されていないメモリへのアクセスをサポートし、アンマネージメモリ内のコンテンツは、ヒープにコピーする必要はありません。
私はこれを行うことはありませんでしたが、このクラスの妥当性を保証することはできません(またはシナリオで管理されていないコード/メモリを使用すること)。
@LoganDam最後に何をしましたか? (あなた自身の解決策を投稿/承認することができます)。私はあなたの声明に基づいてダウンダウン者がそうしていたと仮定することができます_ "または、どこかから管理されていない.dllをロードする必要があります。リンクから明らかでない場合、これは.NET Frameworkクラスであり、 'mscorlib.dll'を介してクラスlibやコンソールアプリケーションにすぐに利用できます。 – Sepster
私はまだ何もしていません。これは研究の質問でした:)(最終的には)私は最終的に実装に戻ってきて、この質問を更新することになるでしょう。 – Logan
@LoganDam Cool。私はあなたがこれにどのように取り組むか見ることに興味があるので、お気に入りとして質問を追加しました。幸運にも;-) – Sepster
私はあなたが[TransmitFile API](http://msdn.microsoft.com/en-us/library/windows/desktop/ms740565.aspx)を探していると思うので、それを聞かなければならないようです。私は、管理されたStreamクラスがゼロコピーを実行しないことは確かです。 –
@JohnRaschそれはそれのように見えます...私はまた、マネージドクラスは実際にゼロコピーをしないだろうと考えました。 – Logan
そして、一番下の誰かが、2GB以上のファイルを好きではないと言いました。「ファイル> 2GBの場合、ERROR_INVALID_PARAMETERで失敗します。」 – Logan