Я пытаюсь заполнить объекты, используя память чтения.Я использую структуру, и она идет довольно быстро, по крайней мере, так кажется.
float x = 0;
while (true)
{
st.Start();
List<DataChild> DataChildList = new List<DataChild>();
var Data = Algorithm.Data;
Data.ChildData.pData = IntPtr.Add(Data.ChildData.pData, 0x20);
for (int i = 0; i < Data.NumberOfObjects; i++)
{
ChildData childData = Data.ChildDatas.ReadValue(i, true);
if (childData.Render.X != x)
{
Console.WriteLine("Change detected");
x = childData.Render.X;
}
DataChildList.Add(childData)
}
Algorithm.Data.Datas = DataChildList;
st.Stop();
Console.WriteLine($"populated in {st.Elapsed.TotalMilliseconds} ms");
st.Reset();
}
}
Вот мои структуры:
[StructLayout(LayoutKind.Explicit)]
public struct ChildData
{
[FieldOffset(0x0)]
public IntPtr BasePointer;
[FieldOffset(0x400)]
public IntPtr pRender;
public Vector3 Render
{
get
{
return M.Read<Render>(this.pRender);
}
}
}
[StructLayout(LayoutKind.Explicit)]
public struct Render
{
[FieldOffset(0x30)]
public float X;
public float posX
{
get
{
return this.X;
}
}
}
Секундомер говорит, что я заполняю данные в 0.005 ms.
Когда я нажимаю клавишу, он меняет значениеиз childData.Render.X
(пока единственный в списке).
Но он отображает его в диапазоне от 0,5 до 1 секунды, что кажется очень медленным по сравнению со скоростью цикла.
Должен сказать, что этот код работает в потоке.
Есть идеи, почему это так долго?Спасибо!