Я создал метод, который будет читать многопозиционный указатель, предоставив требуемые смещения + начальный адрес. (Код ниже). Подводя итог, я пытаюсь оптимизировать этот метод и ниже, я объясню свою проблему.C# Ускоренное чтение памяти с несколькими указателями
Я боролся с конверсией. Параметр - это IntPtr, а выход считываемого адреса - это байтовый массив. Моя первая идея заключалась в следующем: «Преобразовать байтовый массив в IntPtr, переработать его и, наконец, преобразовать последний прочитанный адрес в int32 (поскольку последний адрес не является указателем он никогда не будет считаться, поэтому преобразование здесь в Int32 должно быть полным) »,
Однако это не дало приятного результата. Так что в настоящее время я застрял с решением преобразования байтового массива в Int32, а затем Int32 в IntPtr. Люди говорят, что битконвертер - плохой подход, потому что это может вызвать проблемы на 64-битных платформах, и я также считаю, что есть подход, который может дать лучшую производительность (поскольку Im конвертирует объект 2 раза).
Наконец, если кто-нибудь подумает, что можно будет сделать аналогичную функцию на C++, а затем P/Invoke it in C# (я думаю, это было бы более эффективно так?), Пожалуйста, скажите мне. (Im пытается адаптировать свои знания программирования. И найти сочетание языков очень интересных)
[DllImport("kernel32.dll", EntryPoint = "ReadProcessMemory")]
public static extern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress,
[In, Out] byte[] buffer, Int32 sizeout, out IntPtr lpNumberOfBytesRead);
public Int32 ReadBytes(IntPtr Handle, IntPtr Address, int[] Offsets, int BytesToRead = 4)
{
IntPtr ptrBytesRead;
byte[] value = new byte[BytesToRead];
ReadProcessMemory(Handle, Address, value, BytesToRead, out ptrBytesRead);
//Read Offsets
for (int i = 0; i < Offsets.Length; i++)
{
ReadProcessMemory(Handle,
new IntPtr(BitConverter.ToInt32(value, 0) + Offsets[i]),
value,
BytesToRead,
out ptrBytesRead);
}
return BitConverter.ToInt32(value, 0);
}
Любые идеи, чтобы ускорить этот метод будет очень хорошо оценили! Спасибо, заранее!
Не более конкретный вопрос, чем «улучшить это»? Кроме того, ReadProcessMemory будет, безусловно, самой медленной частью. Все ваши «конверсии» не будут иметь значения для перформанса. – usr
Это, безусловно, так! Большое спасибо за ответ! Нет, я так не думаю. По крайней мере, пока. – LamaCoder