主要目的-使用〜10 ^ 9命令快速解析大文本文件。
想法-使用MemoryMappedFile
类将文件复制到mem并接收指向该mem字段的指针。然后,使用此指针浏览该文件。
static byte* ptrExternal
中AcquirePointer(ref ptrExternal)
的{{1}}的计划设置值。但是LoadFile(string strFileNameInput)
在调用ptrExternal
之后没有更改其值(为了测试,我添加了其他变量和代码)?
AcquirePointer(ref ptrExternal)
除了呼叫class MyMemmoryMappedFile
{
private unsafe static byte* ptrExternal;
private static int iptrExternal; // for test purpose
public static unsafe byte* LoadFile(string strFileNameInput)
{
ptrExternal = (byte*)0;
byte* ptrLocal = (byte*)0; // for test purpose
mmf = MemoryMappedFile.CreateFromFile(strFileNameInput, FileMode.Open);
AccessorViewAccessor = mmf.CreateViewAccessor();
AccessorViewAccessor.SafeMemoryMappedViewHandle.AcquirePointer(ref ptrExternal);
AccessorViewAccessor.SafeMemoryMappedViewHandle.AcquirePointer(ref ptrLocal); // for test purpose
ptrExternal = ptrLocal; // for test purpose
iptrExternal = (int)ptrLocal; // for test purpose
return ptrLocal; // for test purpose
}
和AcquirePointer(ref ptrExternal)
并没有改变ptrExternal的值之外,所有呼叫均按预期工作:ptrExternal = ptrLocal
和{{ 1}}收到了“在mem中归档”的正确值。
ptrLocal
并没有改变自己的值,一直一直指向存储器的某些部分,这部分与编程代码非常相似(从字节iptrExternal
开始)。
为什么我的期望不能奏效?