private void BeginListen()
{
while (isWatch)
{
try
{
Socket newSocket = socket.Accept();
ConnectionClient conn = new ConnectionClient(newSocket, ShowMsg, RemoveClientConnection, SendMsgToController);
string strRemoteEndPoint = newSocket.RemoteEndPoint.ToString();
if (dictConn.ContainsKey(strRemoteEndPoint.Substring(0, strRemoteEndPoint.LastIndexOf(":"))))
dictConn[strRemoteEndPoint.Substring(0, strRemoteEndPoint.LastIndexOf(":"))].isRec = true;
else
dictConn.Add(strRemoteEndPoint.Substring(0, strRemoteEndPoint.LastIndexOf(":")), conn);
UpdateControllerStatus(strRemoteEndPoint, " online");
}
catch (Exception ex)
{
ExceptionLog(ex);
}
}
}
此方法用于收听。
如果我使用线程来创建此方法
myThread = new Thread(new ThreadStart(BeginListen));
myThread.IsBackground = true;
myThread.Start();
捕获异常时GC会收集它吗?
或者我是否需要在catch中手动添加GC.Collect();
?
答案 0 :(得分:-1)
你想收集什么?好吧,通常你不应该自己打电话给GC.Collect。
我会让它为GC收集对象并回收内存资源。但是当某些东西实现IDisposable时,通常应该使用using
语句。
在提供的示例中,您可能不需要使用using
语句,因为套接字可能会在以后使用,也可能已经有一些代码将对象部署在{{1}内}类。现在处理可能会给你带来麻烦。
但通常您可以使用ConnectionClient
语句自动处理资源处理,例如打开文件流,创建内存流等。
要详细了解using语句的用途,Click here.