Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为相邻地址读取ProcessMemory的最有效方法?_C#_.net - Fatal编程技术网

C# 为相邻地址读取ProcessMemory的最有效方法?

C# 为相邻地址读取ProcessMemory的最有效方法?,c#,.net,C#,.net,我正在用下面的代码读取内存中的地址。我突然想到,我这样做可能效率很低,因为我对每个地址进行单独调用,尽管所有地址彼此相邻(1字节) 该函数类似于: pseudo: For loop: read memory address (base address offset) add result to array addressoffset++ 假设我有3个地址,我将分别打3个电话。如果你知道我的意思,有没有办法只调用一次,然后按照内部逻辑将

我正在用下面的代码读取内存中的地址。我突然想到,我这样做可能效率很低,因为我对每个地址进行单独调用,尽管所有地址彼此相邻(1字节)

该函数类似于:

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
   );