.NETアプリケーション、特にWriteFileGatherでオーバーラップIO関数を使用したいと思います。これは標準クラスライブラリでサポートされていますか?.NETクラスライブラリでWriteFileGatherがサポートされています
ボーナスポイント:Monoで動作しますか?
.NETアプリケーション、特にWriteFileGatherでオーバーラップIO関数を使用したいと思います。これは標準クラスライブラリでサポートされていますか?.NETクラスライブラリでWriteFileGatherがサポートされています
ボーナスポイント:Monoで動作しますか?
.NET BCLには直接の機能はありませんが、Windows I/Oのお手伝いをするクラスがいくつかあります。 1)オーバーラップクラスのインスタンスを初期化します。
2)コールバックでコールパックを呼び出します。
3)結果のNativeOverlapped(Packの戻り値)をWriteFileGatherに渡します。
4)私が理解しているように、操作が完了すると、コールバックはワーカースレッドで呼び出される必要があります。
いくつかの要件があるので、WriteFileGatherのMSDNドキュメントを必ず読んでください。データはシステムのページ境界に合わせなければなりません(x86-x64では4K、Itaniumでは8Kと考える)
FileStreamクラスは、ストリームをファイルに公開して、同期および非同期の両方の読み取りおよび書き込み操作をサポートします。 ストリーム上のBeginWriteのデフォルトの実装では、Writeメソッドが同期的に呼び出されます。これは、Writeが一部のストリームでブロックされる可能性があることを意味します。ただし、FileStreamやNetworkStreamなどのクラスのインスタンスは、インスタンスが非同期で開かれた場合、非同期操作を完全にサポートします。したがって、BeginWriteへの呼び出しはこれらのストリームでブロックされません。 FileStreamクラスはモノラルで全く同じように動作するはずです。
私が探していたものではないが、非同期メソッドは依然として単一バッファを扱います。私はJavaのGatheringByteChannelに似た何かを探していました。 –