gpt4 book ai didi

c# - 原始列表的浅克隆列表中的项目被清除会发生什么

转载 作者:行者123 更新时间:2023-12-03 03:07:00 25 4
gpt4 key购买 nike

我的最初意图是通过 TCP 流异步发送列表。但在将列表传递给异步线程之后,我需要立即清除它以再次用新数据填充它。所以我使用浅克隆创建列表的副本,并将其传递给后台线程:

private List<MyDataObject> GetShallowCloneOfDataList(List<MyDataObject> dataEvents)
{
return new List<MyDataObject>(dataEvents);
}

这是我的最终代码:

List<MyDataObject> data = new List<MyDataObject>();
while(hasMoreData)
{
data.clear();
FillListFromServer(data);
List<MyDataObject> clonedList = GetShallowCloneOfDataList(data);
Task.Run(() => SendDataList(clonedList));
}

我的问题是,当我清除原始列表数据时,克隆列表中的项目是否也会受到影响?测试我的代码表明它们不受影响,但我不确定在处理大量数据(每秒 200K)时是否仍然如此。

最佳答案

不,现有项目不受影响,除了可能符合垃圾回收条件之外。

这就像将变量设置为 null,有效:

MyDataObject x = new MyDataObject(); // And populate
MyDataObject y = x; // Just copy the reference
x = null; // This doesn't change either y or the data in the object

另一种思考方式是,如果您有一本充满 friend 和家人地址的地址簿,然后将其扔进火里......您将无法再找到您的 friend 和家人在哪里,但这不会改变他们居住的地方。 (有关此类比的更多信息,请参阅 this answer。)

关于c# - 原始列表的浅克隆列表中的项目被清除会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39695512/

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