【发布时间】:2011-11-17 23:03:35
【问题描述】:
我想将一个结构存储到 MemoryMappedFile 中,但该结构包含引用类型的字符串(具有我知道的最大大小),因此被 MemoryMappedViewAccessor 拒绝。
你知道一个好的定长字符串结构(值类型)实现吗?如果有必要,我可以硬编码长度(因为数组是引用类型)。
例如,我可以将其实例化为:
TenCharsString myString = new TenCharsString("1234567890");
使用 MarshalAs 属性进行装饰
<MarshalAs (UnmanagedType.ByValTStr, SizeConst:=128)>
应该可以,但是不行。
【问题讨论】:
-
MemoryMappedFiles 不使用像 P/Invoke 这样的编组。它们直接在托管内存和文件之间复制字节。
-
抛出的异常是什么?结构是什么样的?
-
MemoryMappedViewAccessor 只接受值类型,包括结构体,只要它们只包含值类型(没有引用类型,如字符串)。我的结构包含 datetimeoffset?、decimal?、long? 和两个导致问题的字符串字段(尽管它们的长度在数据库中是固定的)。