아래 코드로 메모리의 주소를 읽습니다. 모든 주소가 서로 이웃하고 (1 바이트 따라 가기) 모든 주소를 개별적으로 호출 할 때 매우 비효율적으로 수행 할 수 있습니다.인접한 주소에 대한 프로세스 메모리를 읽는 가장 효율적인 방법은 무엇입니까?
[DllImport("kernel32", EntryPoint = "ReadProcessMemory")]
private static extern byte ReadProcessMemoryByte(int Handle, int Address, ref byte Value, int Size, ref int BytesRead);
기능은 다음과 같은 :
pseudo:
For loop:
read memory address (base address offset)
add result to array
addressoffset++
그래서 나는 3 별도의 호출을 할 것, 3 개 주소를 말한다. 무슨 뜻인지 안다면, 단지 1 번만 전화를 걸고 그 결과를 3 개의 개별 데이터 세그먼트로 나누는 내부 논리를 만드는 방법이 있을까요? 바이트 단위로 읽는 대신 한 번에 4 바이트를 읽은 다음 배열에 추가하기 전에 분할하십시오.
내가 묻는 이유는 프로그램이 영원히 반복적으로 진행되기 때문에 때로는 최대 40,000 개의 주소를 읽는 데 3 분이 걸리는 경우가 있기 때문입니다. 내가 묻는 것을 할 수 있다면, 잠시 후에 그걸 끊을 수 있을까?
감사합니다. 내가 이웃 주소에 150 바이트를 가지고 있다고 가정 해 봅시다. 길이 150을 만들어서 반복을 처리 한 다음 150 개의 별도 호출보다는 속도에 많은 차이가 있습니까? – user1166981
은 관리되지 않는 코드를 썽킹하지 않기 때문에 상당히 빠릅니다. –
그래서 40,000 건의 전화가 200 건이됩니다 (200 번지 200 번 읽음) - 지금 바보 같아요. – user1166981