я бегу следующий кусок кода, который использует делегат для возврата асинхронного сетевого потока:High CPU% при использовании делегата
static void Main(string[] args)
{
NetworkStream myNetworkStream;
Socket socket;
IPEndPoint maxPort = new IPEndPoint(IPAddress.Parse("xxx.xxx.xxx.xxx"), xxxx);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
socket.Connect(maxPort);
myNetworkStream = new NetworkStream(socket);
byte[] buffer = new byte[1024];
int offset = 0;
int count = 1024;
string Command = "LOGIN,,,xxxx\n";
ASCIIEncoding encoder = new ASCIIEncoding();
myNetworkStream.BeginRead(buffer, offset, count, new AsyncCallback(OnBeginRead), myNetworkStream);
myNetworkStream.Write(encoder.GetBytes(Command), 0, encoder.GetByteCount(Command));
while (true) { }
}
public static void OnBeginRead(IAsyncResult ar)
{
NetworkStream ns = (NetworkStream)ar.AsyncState;
int bufferSize = 1024;
byte[] received = new byte[bufferSize];
ns.EndRead(ar);
int read;
while (true)
{
if (ns.DataAvailable)
{
string result = String.Empty;
read = ns.Read(received, 0, bufferSize);
result += Encoding.ASCII.GetString(received);
received = new byte[bufferSize];
result = result.Replace(" ", "");
result = result.Replace("\0", "");
result = result.Replace("\r\n", ",");
Console.WriteLine(result);
}
}
}
Это работает, но мое использование CPU через крышу (50% на Intel Core i3), поэтому, очевидно, я делаю это неправильно, но как это сделать?
Благодаря
'while (true)' никогда не будет завершен, и он будет поддерживать циклический цикл работы процессора бесконечно. –
Опишите, что вы пытаетесь сделать, поскольку это не ясно. Ясно, однако, что источником высокой загрузки процессора является то, что вы используете жесткий бесконечный цикл ('while (true)'). –
Я пытаюсь вернуть асинхронный канал с IP-телефона, IPEndPoint связан с портом на сервере вызовов, который подключен к телефону – JMK