我应该为MMF创建不可为空的类(以及如何)吗?

时间:2012-07-29 05:18:44

标签: c# .net memory-mapped-files

我探索了内存映射文件(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' “

我做错了什么?我的班级必须是不可空的,还是我应该以其他方式使用访问者?

谢谢

1 个答案:

答案 0 :(得分:1)

此处的关键字不是“不可空”,而是“valuetyp”。您应该为要读/写的数据声明struct,而不是class。添加“不可为空”仅表示您无法使用foo?代替foo