gpt4 book ai didi

c# - 一些异步套接字代码 - 帮助垃圾收集?

转载 作者:行者123 更新时间:2023-11-30 13:42:52 24 4
gpt4 key购买 nike

我认为这个问题实际上是关于我对垃圾回收变量引用的理解。但我会继续抛出一些代码供您查看。

//请注意不要将此代码用于异步套接字,只是为了突出我的问题

// SocketTransport
// This is a simple wrapper class that is used as the 'state' object
// when performing Async Socket Reads/Writes
public class SocketTransport
{
public Socket Socket;
public byte[] Buffer;
public SocketTransport(Socket socket, byte[] buffer)
{
this.Socket = socket;
this.Buffer = buffer;
}
}

// Entry point - creates a SocketTransport, then passes it as the state
// object when Asyncly reading from the socket.
public void ReadOne(Socket socket)
{
SocketTransport socketTransport_One =
new SocketTransport(socket, new byte[10]);

socketTransport_One.Socket.BeginRecieve
(
socketTransport_One.Buffer, // Buffer to store data
0, // Buffer offset
10, // Read Length
SocketFlags.None // SocketFlags
new AsyncCallback(OnReadOne), // Callback when BeginRead completes
socketTransport_One // 'state' object to pass to Callback.
);
}

public void OnReadOne(IAsyncResult ar)
{
SocketTransport socketTransport_One = ar.asyncState as SocketTransport;
ProcessReadOneBuffer(socketTransport_One.Buffer); // Do processing

// New Read
// Create another! SocketTransport (what happens to first one?)
SocketTransport socketTransport_Two =
new SocketTransport(socket, new byte[10]);

socketTransport_Two.Socket.BeginRecieve
(
socketTransport_One.Buffer,
0,
10,
SocketFlags.None
new AsyncCallback(OnReadTwo),
socketTransport_Two
);
}

public void OnReadTwo(IAsyncResult ar)
{
SocketTransport socketTransport_Two = ar.asyncState as SocketTransport;
..............

所以我的问题是:

  • 要创建的第一个 SocketTransport (socketTransport_One) 具有对 Socket 对象的强引用(让调用是 ~SocketA~)。

  • 异步读取完成后,将创建一个新的 SocketTransport 对象 (socketTransport_Two),该对象还带有对 ~SocketA~ 的强引用。

    Q1。当方法 OnReadOne 退出时,垃圾收集器会收集 socketTransport_One 吗?即使它仍然包含对 ~SocketA~ 的强引用

谢谢大家!

最佳答案

在您的示例中,socketTransport_One 应该 被垃圾回收,因为没有其他对象对 有强引用。仅仅因为它具有对另一个对象的强引用并不意味着它不符合垃圾收集的条件。

关于c# - 一些异步套接字代码 - 帮助垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1660777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com