我探索了内存映射文件(MMF),这是我到目前为止所做的仅仅是关于MSDN上的示例http://msdn.microsoft.com/en-us/library/dd997372.aspx
class MMF {
private long offset = 0x10000000; // 256 megabytes
private long length = 0x20000000; // 512 megabytes
public MMF() {
using (var mmf = MemoryMappedFile.CreateFromFile(@"c:\NFS", FileMode.Open, "NMAP")) {
using (var accessor = mmf.CreateViewAccessor(offset, length)) {
int fsSize = Marshal.SizeOf(typeof(FS));
FS nfs;
// Make changes to the view.
for (long i = 0; i < length; i += fsSize) {
accessor.Read(i, out nfs);
accessor.Write(i, ref nfs);
其中FS只是另一个类对象的数组
public class FS {
public NFS[] files;
}
但是我收到了错误:
类型'NEN_Server.FS.FS'必须是非可空值类型才能在泛型类型或方法'System.IO.UnmanagedMemoryAccessor.Read(long,out T)中将其用作参数'T' “
我做错了什么?我的班级必须是不可空的,还是我应该以其他方式使用访问者?
谢谢
答案 0 :(得分:1)
此处的关键字不是“不可空”,而是“valuetyp”。您应该为要读/写的数据声明struct
,而不是class
。添加“不可为空”仅表示您无法使用foo?
代替foo
。