为什么我的C#套接字程序有很多\ device \ afd句柄?

时间:2018-03-14 11:57:40

标签: c# tcpsocket handle-leak

我已经编写了一个tcp套接字prgram,它使用套接字asyncoronously。

这是我的代码的一部分:

public void main()
{
   var e = new SocketAsyncEventArgs();
   e.Completed += new EventHandler<SocketAsyncEventArgs>(e_Completed);
   Task.Factory.StartNew(() =>
   {                        
         allDone.Reset();
         mySocket.AcceptAsync(e);
         allDone.WaitOne();                       
   });
}

public void e_Completed(object sender, SocketAsyncEventArgs e)
{
     var socket = (Socket)sender;
     ThreadPool.QueueUserWorkItem(HandleTcpRequest, e.AcceptSocket);
     e.AcceptSocket = null;
     socket.AcceptAsync(e);
}

public void HandleTcpRequest(object state)
{
    var mySocket = (Socket)state;
    try
    {
       //do some codes and work with mySocket 
    }
    catch (Exception ex)
    {
    }
    finally
    {
        mySocket.Close();
        mySocket.Dispose();
    }
}

在我的流程中,我在进程资源管理器中看到了很多\ device \ afd。我已经对此进行了大量的阅读和搜索,发现它与辅助功能驱动程序和传输驱动程序接口有关。我该如何解决这个句柄泄漏?

==========&GT;编辑了我的代码:

编辑为同步接受10个套接字。

感觉程序更快,但是当我按住Ctrl + F5时,找到它 进程资源管理器中有超过10个\ device \ afd,当继续进行推送时,请查看更多\ device \ afd,但降低上面的代码。

 mySocket.Listen(10);
 while (true)
 {                                                
      using (Socket so = mySocket.Accept())
      {
            HandleTcpRequest(so);
      }   
 }

0 个答案:

没有答案