我想建立一個多線程服務器,應該爲每個傳入連接產生新線程,但是對於我所有的努力,它只在感覺像它時纔會產生新線程,任何人都可以幫助我調試碼?我錯過了一些明顯的東西?C#多線程調試
while (true)
{
if (txtAddress.Text.Trim() == "Any" || txtAddress.Text.Trim() == "any")
ipEndP = new IPEndPoint(IPAddress.Any, 778);
else
ipEndP = new IPEndPoint(IPAddress.Parse(txtAddress.Text.Trim()), 778);
tcpL = new TcpListener(ipEndP);
tcpL.Server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
tcpL.Start();
tempSock = tcpL.AcceptSocket();
//t = new Thread(ConnectionHandler); //When new client is connected, new thread //is created to handle the connection
//t.Priority = ThreadPriority.Highest;
//t.Start(tempSock);
ThreadPool.QueueUserWorkItem(ConnectionHandler, tempSock);
}
IMO你不使用線程池是不明智的。線程池在99%的時間內比手動線程執行得更好。 – Dan 2012-08-09 02:28:28
另一個有用的參考是http://msdn.microsoft.com/en-us/library/0ka9477y.aspx – 2012-08-09 02:28:38
這裏有一個平衡點,使用線程池可能適用於短暫連接。如果連接足夠長,那麼隨着時間的推移線程池將耗盡。國際海事組織(IMO)對每個套接字操作的讀寫都安排在線程池中會更好,這可以通過位於http://msdn.microsoft.com/en-us/library/system的SocketAsyncEventArgs示例輕鬆完成。 net.sockets.socketasynceventargs.aspx。表示連接的狀態可以很容易地維護而不需要專用線程。 – 2012-08-09 02:33:59