C# 为相邻地址读取ProcessMemory的最有效方法?
我正在用下面的代码读取内存中的地址。我突然想到,我这样做可能效率很低,因为我对每个地址进行单独调用,尽管所有地址彼此相邻(1字节) 该函数类似于:C# 为相邻地址读取ProcessMemory的最有效方法?,c#,.net,C#,.net,我正在用下面的代码读取内存中的地址。我突然想到,我这样做可能效率很低,因为我对每个地址进行单独调用,尽管所有地址彼此相邻(1字节) 该函数类似于: pseudo: For loop: read memory address (base address offset) add result to array addressoffset++ 假设我有3个地址,我将分别打3个电话。如果你知道我的意思,有没有办法只调用一次,然后按照内部逻辑将
pseudo:
For loop:
read memory address (base address offset)
add result to array
addressoffset++
假设我有3个地址,我将分别打3个电话。如果你知道我的意思,有没有办法只调用一次,然后按照内部逻辑将结果分割成3个独立的数据段?就像不是逐字节读取,而是一次读取4个字节,然后在添加到数组之前将它们拆分
我问这个问题的原因是,我的程序要花很长时间才能完成迭代,有时需要读取多达40000个地址,这需要3分钟。如果我能按我的要求做,那么也许我可以在一分钟内把它缩短?从中,方法签名应该是这样的:
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(
IntPtr hProcess,
IntPtr lpBaseAddress,
[Out] byte[] lpBuffer,
int dwSize,
out int lpNumberOfBytesRead
);
目前,由于对于
lpBuffer
/值
,您只有一个字节
,因此一次只能读取一个字节。通过将其设置为byte[]
并传递一个大于1的Size
,您可以读取更多的字节(可能是您打算读取的所有字节,或者分解为1024个字节块)。谢谢。假设我在相邻地址中有150个字节,我是否可以将长度设为150,然后在迭代后处理数组,这会对速度产生很大影响,而不是150个单独的调用?由于不使用非托管代码,速度明显加快。因此40000个调用变为200个(以前读了200个地址200次)-我现在觉得自己很愚蠢。。
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(
IntPtr hProcess,
IntPtr lpBaseAddress,
[Out] byte[] lpBuffer,
int dwSize,
out int lpNumberOfBytesRead
);