У меня есть проблема, которая беспокоит меня уже несколько дней. Я пытался найти в 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;
}
для преобразования байтового массива в двумерный массив с плавающей точкой. Данные предварительно считываются из потока.
Я обнаружил, что проблема в методе System.Buffer.BlockCopy.
Если я удалю команду BlockCopy, память, используемая приложением, будет вдвое меньше. это означает, что я не виноват, что байтовый массив все еще жив. потому что без команды BlockCopy байтовый массив умирает правильно. массив float все равно создается (с копируемой информацией или без нее).
Я не совсем уверен, является ли это проблемой команды BlockCopy или GC, потому что я также пытался вызвать System.GC.Collect (); после BlockCopy, а затем он также работает отлично (я знаю, что вы не должны делать это ... вот почему я прошу совета здесь).
Я бы тоже не стал спрашивать, но проблема связана с несколькими сотнями мег.
Помимо проблем с памятью, метод работает отлично. Кто-нибудь знает, что вызывает проблемы с памятью?
привет и заранее спасибо
оли
ps: я использую .NET4.0 с Visual Studio 2010 PRO и WIN7 ... не знаю, уместно ли это.