更新的问题
由于.NETCF(公共FileStream(IntPtr句柄,FileAccess访问)不支持ctor。您能否建议在有限资源(RAM)平台上的托管和非托管代码之间共享内存中的大文件的其他方法。基本上我想将文件映射到进程空间/堆之外的 2GB 用户空间 (Win CE 5.0) 的上部区域。我该如何在 C# 中做到这一点。
此外,在 Win CE 5.0 上,MemoryStream 对象是否在堆或内存映射区域中分配空间?
谢谢...
原始问题
我正在使用本机 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) 鉴于 .NETCF 版本不支持 SafeFileHandle / Handle 属性,这种处理方式有什么问题吗?有没有更好的方法(我打算将本机内存映射文件句柄与 FileStream / MemoryStream 一起使用)?
2) FileStream 对象分配的内存是否属于 .NETCF 垃圾收集器?或者假设该句柄是使用本机 API 创建的内存映射文件,它(托管 FileStream 对象及其资源)不在垃圾收集器的权限范围内?*
提前致谢。