У меня есть проблема, которая беспокоит меня уже несколько дней. Я пытался найти проблему в 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... не знаю, имеет ли это значение или нет.