c# - 关于C#中数组浅拷贝的问题

标签 c# arrays string shallow-copy

只是为了确保我正确理解引用类型的浅拷贝,并且我没有在此处构建巨大的内存泄漏:

// Adds text to the beginning of the log RTB
// Also keeps the log RTB trimmed to 100 lines
var lines = new string[rtbLog.Lines.Length + 1];
lines[0] = "text";
Array.Copy(rtbLog.Lines, 0, lines, 1, rtbLog.Lines.Length);

if (lines.Length > 100)
{
    Array.Resize(ref lines, 100);
}

rtbLog.Lines = lines;

这将首先将 refs 复制到 rtbLog.Lines 中的字符串到行中。然后它将前 100 个引用从行复制到一个新的字符串数组中。

意思是 rtbLog.Lines 最初引用的数组,最初由行引用的数组(在调整大小之前),最后是行中不包含的任何字符串(在调整大小之后),都​​会被垃圾收集。 (我希望这是有道理的)

正确吗?

最佳答案

Array.Resize 方法有点用词不当。它实际上应该命名为 CopyToNewArrayWithSize。在幕后,此 API 将创建一个新数组并将指定的数据复制到该数组中。然后通过引用返回新数组。

至于垃圾回收。通过将 Lines 属性重置为新数组,您确实成功地删除了对该数组的原始引用。只要没有其他对该数组的引用,它就会在将来的某个时间点被垃圾回收。

关于c# - 关于C#中数组浅拷贝的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/791764/

相关文章:

c# - 为什么struct比float慢?

c# - 运行时换出编译时静态引用的程序集

c# - 如何隐式转换反射方法调用

javascript - 如何从数组中检索和访问 javascript 对象文本中的字段?

c# - 异步任务挂起

每个节点具有恒定时间的 C++ 树

R-将文本中的分数转换为数值

Java Substring - 提取下一个出现的引号中包含的字符串

file-io - 在 clojure 中,为什么从空文件中分割字符串会返回 1 个元素?

java - 如何在 for 循环中将值存储在数组中?