提问人:Reza Akraminejad 提问时间:3/14/2018 最后编辑:Reza Akraminejad 更新时间:7/11/2018 访问量:6276
为什么我的 C# 套接字程序有很多 \device\afd 句柄?
Why my C# socket program has lots of \device\afd handles?
问:
我写了一个 tcp 套接字 prgram,可以异步使用套接字。
这是我代码的一部分:
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。我已经阅读并搜索了很多关于此的内容,发现它与辅助功能驱动程序和传输驱动程序接口有关。如何解决此手柄泄漏?
==========>编辑了我的代码:
编辑为仅接受 10 个同步方式的套接字。
感觉程序更快,但是当我将手指按在 Ctrl+F5 上时,发现 进程资源管理器中有 10 个以上的 \device\afd,当继续推送时,请参阅更多 \device\afd,但低于代码上方。
mySocket.Listen(10);
while (true)
{
using (Socket so = mySocket.Accept())
{
HandleTcpRequest(so);
}
}
答: 暂无答案
评论
SocketAsyncEventArgs
TcpClient
Socket
SocketAsyncEventArgs