2011-09-23 60 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); 
相关问题