Я читаю из NetworkStream, который находится в цикле while. Проблема в том, что я вижу 100% использование ЦП. Есть ли способ остановить это?Чтение на NetworkStream = использование 100% CPU
Вот то, что я до сих пор:
while (client != null && client.Connected)
{
NetworkStream stream = client.GetStream();
data = null;
try
{
// Check if we are still connected.
if (client.Client.Poll(0, SelectMode.SelectRead))
{
byte[] checkConn = new byte[1];
if (client.Client.Receive(checkConn, SocketFlags.Peek) == 0)
{
throw new IOException();
}
}
if (stream.DataAvailable)
{
//Read the first command
WriteToConsole("Waiting for next command");
data = ReadStringFromClient(client, stream);
WriteToConsole("Received Command: " + data);
}
}
... Код продолжается ...
код ReadStringFromClient:
private string ReadStringFromClient(TcpClient clientATF, NetworkStream currentStream)
{
int i;
string builtString;
byte[] stringFromClient = new byte[256];
if (clientATF.Connected && currentStream.CanRead)
{
i = currentStream.Read(stringFromClient, 0, stringFromClient.Length);
builtString = System.Text.Encoding.ASCII.GetString(stringFromClient, 0, i);
}
else
{
return "Connection Error";
}
return builtString;
}
Это было самое простое решение, однако ... я теперь знаю, что асинхронные сокеты должны были стать отправной точкой. –
Я использовал опросные петли с сокетами в прошлом и обнаружил, что очень короткая задержка блокировки в конце цикла устранит эту проблему. Следующий код работает хорошо: 'System.Threading.Thread.Sleep (10);' – Nate
@Nate Это в основном то, что было моим предложением, но, пожалуйста, прочитайте глубже, хотя он работает и может быть легко сделать, это очень плохой дизайн. –