C# System.Buffer.BlockCopy Memory Issue?

У меня есть проблема, которая беспокоит меня уже несколько дней. Я пытался найти проблему в Google, но пока не смог найти никаких решений, даже ни одного человека с такой же проблемой.

Похоже, что метод C# System.Buffer.BlockCopy оставляет вас с какими-то призраками памяти. У меня есть, например, такой метод:

private float[,] readFloatArray2 (byte[] b) {
   int floatSize = sizeof(float);
   float[,] v = new float[2, (b.Length / 2) / floatSize];
   System.Buffer.BlockCopy(b, 0, v, 0, b.Length);

   return v;
}

для преобразования массива байтов в двумерный массив float. Данные предварительно считываются из потока. Я обнаружил, что проблема заключается в методе System.Buffer.BlockCopy.

Если я уберу команду BlockCopy, то память, используемая приложением, будет вдвое меньше. Это означает, что я не виноват в том, что массив байтов все еще жив. потому что без команды BlockCopy массив байтов умирает должным образом. массив float создается в любом случае (с или без скопированной информации).

Я не совсем уверен, является ли это проблемой команды BlockCopy или GC, потому что я также пытался вызвать System.GC.Collect(); после BlockCopy, и тогда все работает отлично (я знаю, что этого делать не следует... поэтому я и прошу совета).

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

Кроме проблем с памятью, метод работает совершенно нормально. Кто-нибудь знает, что вызывает проблему с памятью?

приветствую и заранее благодарю. oli

ps: Я использую .NET4.0 с Visual Studio 2010 PRO и WIN7... не знаю, имеет ли это значение или нет.

6
задан Gayot Fow 3 January 2012 в 15:01
поделиться