c#如果捕获新方法的异常,GC会收集这个对象吗?

时间:2015-01-25 01:50:10

标签: c# multithreading garbage-collection

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();

1 个答案:

答案 0 :(得分:-1)

你想收集什么?好吧,通常你不应该自己打电话给GC.Collect。

我会让它为GC收集对象并回收内存资源。但是当某些东西实现IDisposable时,通常应该使用using语句。

在提供的示例中,您可能不需要使用using语句,因为套接字可能会在以后使用,也可能已经有一些代码将对象部署在{{1}内}类。现在处理可能会给你带来麻烦。

但通常您可以使用ConnectionClient语句自动处理资源处理,例如打开文件流,创建内存流等。

要详细了解using语句的用途,Click here.