Собирает ли GC объекты, ссылающиеся на сокет? - PullRequest
0 голосов
/ 12 марта 2019

Будет ли когда-нибудь сборщик мусора OBS объект obs?

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            CreateSOB();
            Form form = new Form();
            form.Show();
            GC.Collect();
            Application.Run();
        }

        static void CreateSOB()
        {
            SOB sop = new SOB();
        }

        public class SOB
        {
            private Socket socket;

            public SOB()
            {
                socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.IP);
                socket.Bind(new IPEndPoint(IPAddress.Any, 12345));
                byte[] buffer = new byte[4096];
                socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), buffer);
            }

            public void ReceiveCallback(IAsyncResult ar)
            {
                MessageBox.Show("recv:" + socket.EndReceive(ar).ToString());
                byte[] buffer = new byte[4096];
                socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), buffer);
            }
        }
    }
}

В приведенном выше примере CreateSOB() создает локальную переменную sob типа SOB, которая, в свою очередь, создает сокет и сохраняет ссылку на него.

Поскольку ни один поток не хранит прямую ссылку на объект sob, будет ли он когда-либо собираться GC?

...