#c# #sockets #network-programming #udp
#c# #сокеты #сетевое программирование #udp
Вопрос:
С помощью следующего кода есть ли лучший способ настроить прослушивание UDP, чем while(true)
с Thread.Sleep(10)
?
public void Start()
{
socket.Bind(ip);
while (true)
{
data = new byte[1024];
receivedDataLength = socket.ReceiveFrom(data, ref Remote);
raw = Encoding.ASCII.GetString(data, 0, receivedDataLength);
row = new LogRow(raw);
//Console.WriteLine(row.ClientIp);
row_queue.Enqueue(row);
Thread.Sleep(10);
}
}
Ответ №1:
ReceiveFrom
блокируется. Поток будет приостановлен до поступления данных. Если Socket
не находится в неблокирующем режиме.
Комментарии:
1. Вы должны добавить, что, поскольку
ReceiveFrom
блокируется, вSleep
этом нет необходимости.2. Ах да, должно быть, это мой поток вставки, который записывает процессор. Спасибо, я удалю
sleep
.3. @Кайл Брандт ♦ да,
Spleep
это чрезмерно. Запустите приложение в режиме отладки, а когда начнется запись, приостановите отладку и проверьте каждый поток, не прерывающийся.