Intel UPNP lib是一个很好用的东东,也是UPNP官方
推荐的,不过也有一些瑕疵。
长时间运行可能会导致系统资源(CPU,memory,socket)占用过多。
最主要的原因是其没有及时释放资源。
1. 注意UPnPDevice.cs中函数:
通过此函数,返回解析后的UPnPDevice。
设若发生异常,那么图中红框内UPnPDevice RetVal所占用系统资源
将不能释放。原因如下:
UPnPDevice将会调用SSDP来解析设备,SSDP.cs构造函数中会SetupSessions()
,再看SetupSessions()中使用UdpClient来发起网络请求,但是SSDP.Dispose()
中并没有释放UdpClient资源,解决办法是在SSDP.Dispose()中加上
foreach (UdpClient client in sessions.Values)
{
client.Close();
}
foreach (UdpClient client in usessions.Values)
{
client.Close();
}