Основная цель - быстрый анализ большого текстового файла с помощью команд ~ 10 ^ 9.
Идея - скопировать файл в mem и получить указатель на это поле mem, используя класс MemoryMappedFile
. И после этого просмотрите этот файл, используя этот указатель.
Запланированное заданное значение static byte* ptrExternal
на AcquirePointer(ref ptrExternal)
из 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
, который также не изменил значение ptrExternal, все работают должным образом: ptrLocal
и iptrExternal
получили правильные значения для "файл в памяти".
ptrExternal
не изменял свои собственные значения и постоянно постоянно указывал на некоторую часть памяти, эта часть памяти очень похожа на программный код (начинается с байта b8 9a...
).
Почему это не сработало, как я ожидал?