smk 0 3 августа, 2015 Опубликовано 3 августа, 2015 · Жалоба В приведенной функции есть буфер byte[] buffer = new byte[_tcpСlient.Available]; Он "местного значения". Мне нужно либо скопировать его в глобальный массив либо как-то сделать чтобы прием велся сразу в глобальный массив. Пробовал копировать в цикле - не получается. Максимум что удалось - это скопировать первый элемен массива, а нужно 256 (1460 максимум). Может есть что-то типа memcpy? Прошу помочь. Спасибо. // Цикл извлечения сообщений, // запускается в отдельном потоке. void ReceiveRun() { while (true) { try { string s = null; //int i=0; while (ns.DataAvailable == true) { // Определение необходимого размера буфера приема. byte[] buffer = new byte[_tcpСlient.Available]; ns.Read(buffer, 0, buffer.Length); s += Encoding.Default.GetString(buffer); } if (s != null) { ShowReceiveMessage(s); s = String.Empty; } // Вынужденная строчка для экономия ресурсов процессора. // Неизящный способ. Thread.Sleep(100); } catch { ErrorSound(); } if (_stopNetwork == true) break; } } #endregion Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fatlortroll 0 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба есть буфер byte[] buffer = new... Он "местного значения" Выделяется память, и не освобождается. Уже проблема. Почему-то выделяется _tcpСlient.Available байт памяти, а читать пытается buffer.Length (кстати, откуда у buffer, который простой массив, берётся Length? как это вообще компилируется?). Ну и в конце концов, отчего не передать в ns.Read указатель на глобальный массив, и его размер? Не надо будет каждый раз выделять память в потоке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба Выделяется память, и не освобождается. Уже проблема.Это не проблема, это C# - у него есть сборщик мусора. Он сам удалит память. В приведенной функции есть буфер byte[] buffer = new byte[_tcpСlient.Available]; Он "местного значения". Мне нужно либо скопировать его в глобальный массив либо как-то сделать чтобы прием велся сразу в глобальный массив.Просто верни из функции этот самый buffer. Сборщик мусора позаботится об остальном. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 7 августа, 2015 Опубликовано 7 августа, 2015 · Жалоба Пора думать в сторону Async Callbacks Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smk 0 11 августа, 2015 Опубликовано 11 августа, 2015 · Жалоба Спасибо за помощь, попробую. Только оно еще и виснет периодически, не понятно от чего. Ошибок не пишет. Просто клякнет. Закроешь - закроется, только сокет не закроестся, а это проблема. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться