2013-03-21 15 views
7

Javaではjava.nioライブラリを使用し、FileChannel.transferTo()FileChannel.transferFrom()を使用します。 (特に)C#で何か類似しているのですか、どこからunamanaged .dllをロードする必要がありますか?この場合、Googleは役に立ちませんでした。.NETでゼロコピーを実行する方法はありますか?

編集:私は.NET 3.5をターゲットにしていることに注意してください。

+1

私はあなたが[TransmitFile API](http://msdn.microsoft.com/en-us/library/windows/desktop/ms740565.aspx)を探していると思うので、それを聞かなければならないようです。私は、管理されたStreamクラスがゼロコピーを実行しないことは確かです。 –

+0

@JohnRaschそれはそれのように見えます...私はまた、マネージドクラスは実際にゼロコピーをしないだろうと考えました。 – Logan

+0

そして、一番下の誰かが、2GB以上のファイルを好きではないと言いました。「ファイル> 2GBの場合、ERROR_INVALID_PARAMETERで失敗します。」 – Logan

答えて

2

最高の性能を発揮するのはUnmanagedMemoryStreamだと思います。

このクラスは、既存のストリームベースのモデルを使用して管理されていないメモリへのアクセスをサポートし、アンマネージメモリ内のコンテンツは、ヒープにコピーする必要はありません。

私はこれを行うことはありませんでしたが、このクラスの妥当性を保証することはできません(またはシナリオで管理されていないコード/メモリを使用すること)。

+0

@LoganDam最後に何をしましたか? (あなた自身の解決策を投稿/承認することができます)。私はあなたの声明に基づいてダウンダウン者がそうしていたと仮定することができます_ "または、どこかから管理されていない.dllをロードする必要があります。リンクから明らかでない場合、これは.NET Frameworkクラスであり、 'mscorlib.dll'を介してクラスlibやコンソールアプリケーションにすぐに利用できます。 – Sepster

+0

私はまだ何もしていません。これは研究の質問でした:)(最終的には)私は最終的に実装に戻ってきて、この質問を更新することになるでしょう。 – Logan

+0

@LoganDam Cool。私はあなたがこれにどのように取り組むか見ることに興味があるので、お気に入りとして質問を追加しました。幸運にも;-) – Sepster

関連する問題