Добрый день, собственно настало то время когда мне нужно работать с массивом байтов, а я в них ни тю, тю, изучал их мельком, собственно суть вопроса.
У меня есть массив байтов 'Data', и мне нужно их передать в 'SendAsync(data.Data, 20);'
Если я передаю их напрямую то вылазит исключение - StackOverflowException.
И как я понял мне надо создать какой то BlockSize (Или как то так) типа - var buff = new byte[3840];
Вот что принимает SendAsync -
Собственно что мне делать?
Массив в C# - это область памяти, перед которой идут указатель на тип элемента массива и количество элементов.
В SendAsync ты можешь посылать всё что тебе угодно, никаких ограничений нет. Если ты получаешь ошибку StackOverflowException, это значит что область памяти, выделенная под стек текущего потока исчерпана. По-умолчанию размер стека - 1 МБ. Если ты не занимаешься ручным выделением памяти, то с вероятностью в 98% это рекурсивные вызовы. Чаще всего - вызов одного и того же метода из себя самого. Реже - длинная цепь рекурсивных вызовов на большом количестве элементов (н.п. разворачивание контейнеров на файловой системе). В этом случае поможет переход к хвостовой рекурсии.
Могу предположить, что в твоём случае событие MediaDataSent райсится после отправки данных, сохраняя контекст вызовов, формируя таким образом бесконечную цепочку вызовов. Проверить это можно, раскомментировав строчку с отправкой данных, встав в этом месте в отладчике, и пропустив несколько итераций. После этого посмотри в окно стека вызовов.
Продвижение своими сайтами как стратегия роста и независимости