2011-09-23 111 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,因爲我不知道需要預先讀取的內存大小。

有關如何改進此功能的性能的任何想法?

回答

6

而是循環的嘗試copying整個塊:

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

cool!謝謝。現在只需要380毫秒。 ! – Santhosh

+0

@Santhosh:這並不奇怪。收集數據並不便宜。 –

3

使用Marshal.Copy()

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