2011-09-23 4 views
3

관리되지 않는 메모리를 관리되는 바이트 배열로 읽어야합니다.관리되지 않는 메모리를 관리되는 바이트 배열로 복사

이렇게하려면 관리되지 않는 메모리에 대한 IntPtr 참조와 관심있는 관리되지 않는 메모리의 크기를 나타내는 길이가 있습니다.

다음 코드를 사용하여이를 관리되는 바이트 배열로 읽습니다.

  byte[] pixelDataArray = new byte[pixelDataLength]; 
      for (int i = 0; i < pixelDataLength; i++) { 
       pixelDataArray[i] = Marshal.ReadByte(pixelData, i); 
      } 

그러나 성능이 매우 떨어집니다. 이 방법을 관리되지 않는 메모리 256KB로 1000 번 호출하면 7 초 이상 걸립니다. 나는 이것을하는 더 효율적인 방법이 있어야한다고 생각합니다.

Marshal.PtrToStructure를 사용할 수 없습니다. 선행 읽기가 필요한 메모리 크기를 알 수 없기 때문입니다.

이 기능의 성능을 향상시킬 수있는 방법에 대한 아이디어가 있으십니까?

Marshal.Copy(pixelData, pixelDataArray, 0, pixelDataLength); 

답변

6

copying에게 전체 덩어리를보십시오.

byte[] pixelDataArray = new byte[pixelDataLength]; 
Marshal.Copy(pixelData, pixelDataArray, 0, pixelDataArray.Length); 
+0

cool! 감사. 이제는 380 밀리 초 밖에 걸리지 않습니다. !! !! – Santhosh

+0

@ 산 토쉬 : 놀라운 일이 아닙니다. 데이터 마샬링은 저렴하지 않습니다. –

관련 문제