0

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

我究竟做错了什么?我的类必须是不可为空的还是应该以其他方式使用访问器?

谢谢你

4

1 回答 1

1

这里的关键字不是“non-nullable”,而是“valuetyp”。您应该为struct要读取/写入的数据声明 a,而不是class. 添加“不可为空”仅意味着您不能使用foo?代替foo.

于 2012-07-29T07:56:11.677 回答