Копирование неуправляемой памяти в управляемый байтовый массив - PullRequest
3 голосов
/ 23 сентября 2011

Мне нужно прочитать неуправляемую память в массив управляемых байтов.

Для этого у меня есть ссылка IntPtr на неуправляемую память и длина, которая представляет размер неуправляемой памяти, которая мне интересна.

Я использую следующий код, чтобы прочитать его в массив управляемых байтов.

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

Однако это приводит к очень низкой производительности. Вызов этого метода 1000 раз с 256 КБ неуправляемой памяти занимает более 7 секунд. Я думаю, что должен быть более эффективный способ сделать это.

Я не мог использовать Marshal.PtrToStructure, потому что я не знал бы размер памяти, которую нужно читать заранее.

Есть идеи, как можно улучшить производительность этой функции?

Ответы [ 2 ]

6 голосов
/ 23 сентября 2011

Вместо циклов попробуйте Копирование всего фрагмента:

Marshal.Copy(pixelData, pixelDataArray, 0, pixelDataLength);
3 голосов
/ 23 сентября 2011

Использование Marshal.Copy().

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