Использование процессора на 100% с сервером чата, созданным с использованием потоков C#
У меня есть чат-сервер, созданный с помощью Threads, он работает хорошо, и у меня подключено 5 клиентов, но загрузка ЦП увеличивается со временем до 100%! Зонд поставил Thread.Sleep (30000), но проблему не решил, вот код при подключении нового клиента
public void StartListening()
{
// Get the IP of the first network device, however this can prove unreliable on certain configurations
IPAddress ipaLocal = ipAddress;
// Create the TCP listener object using the IP of the server and the specified port
tlsClient = new TcpListener(ipaLocal, 1986);
// Start the TCP listener and listen for connections
tlsClient.Start();
// The while loop will check for true in this before checking for connections
ServRunning = true;
// Start the new tread that hosts the listener
thrListener = new Thread(KeepListening);
thrListener.Start();
}
private void KeepListening()
{
// While the server is running
while (ServRunning == true)
{
// Accept a pending connection
tcpClient = tlsClient.AcceptTcpClient();
// Create a new instance of Connection
Connection newConnection = new Connection(tcpClient);
Thread.Sleep(30000);
}
}
}
2 ответа
AcceptTcpClient
это блокирующий вызов, поэтому нет причин для вызова Thread.Sleep
:
AcceptTcpClient - это метод блокировки, который возвращает TcpClient, который можно использовать для отправки и получения данных.
Я думаю, что ваша проблема 100% загрузки ЦП может быть в другом месте в вашем приложении.
Используйте асинхронную версию AcceptTcpClient с именем BeginAcceptTcpClient. Документы для BeginAcceptTcpClient с примером кода доступны здесь.