更新された質問
ctor は .NETCF (パブリック FileStream(IntPtr ハンドル、FileAccess アクセス) ではサポートされていないため、限られたリソース (RAM) プラットフォームでマネージ コードとアンマネージ コードの間でメモリ内の大きなファイルを共有する他の方法を提案してください。プロセス空間/ヒープ外の 2GB ユーザー空間 (Win CE 5.0) の上部領域にファイルをマップする. C# でそれを行うにはどうすればよいですか?
また、MemoryStream オブジェクトは Win CE 5.0 のヒープまたはメモリ マップ領域にスペースを割り当てますか?
ありがとう...
元の質問
以下のように、ネイティブの CreateFile() によって返されるファイル ハンドルを使用して、FileStream オブジェクト (.NETCF 、C#) をインスタンス化しています。
//P/Invoke
[DllImport("coredll.dll", SetLastError = true)]
public static extern IntPtr CreateFile(string lpFileName,
uint dwDesiredAccess,
uint dwShareMode,
IntPtr lpSecurityAttributes,
uint dwCreationDisposition,
uint dwFlagsAndAttributes,
IntPtr hTemplateFile);
// File handle received from native Win32 API
IntPtr ptr= CreateFile("myfile.txt",
0,
0,
0,
FileMode.Create,
0,
IntPtr.Zero);
//Instantiate a FileStream object using handle (returned above) as parameter.
FileStream fs = new FileStream(ptr,FileAccess.ReadWrite);
ファイルのサイズが大きくなり、500 KB 以上になります。だから、私の質問は次のとおりです。
*1) SafeFileHandle / Handle プロパティが .NETCF バージョンでサポートされていないことを考えると、この方法で何か問題はありますか? それを行うより良い方法はありますか (FileStream / MemoryStream でネイティブ メモリ マップ ファイル ハンドルを使用する予定です)。
2) FileStream オブジェクトによって割り当てられたメモリは .NETCF ガベージ コレクタに該当しますか? または、ハンドルがネイティブ API を使用して作成されたメモリ マップされたファイルのものである場合、それ (マネージド FileStream オブジェクトとそのリソース) はガベージ コレクターの範囲外ですか?*
前もって感謝します。