Грузчик Asked:2022-06-22 19:45:51 +0000 UTC2022-06-22 19:45:51 +0000 UTC 2022-06-22 19:45:51 +0000 UTC Span<char> 和内存中的字符串模型之间的区别? 772 Span 中的相同字符串表示为字符值的连续填充单元格,而在字符串中 - 为内存中具有字符值的随机分散的单元格? c# 1 个回答 Voted Best Answer aepot 2022-06-22T20:13:46Z2022-06-22T20:13:46Z 字符串是对不可变的连续内存区域的引用,其中包含: 字符串长度 4 个字节 = N N 个字符,每个 2 字节 那是声明 随机分散的记忆细胞 错误的。 Span<char>是一个存储其长度和对某个内存区域的引用的结构。也就是说,在 span 有数据的地方,没有关于长度的信息,长度和指向数据开头的链接都存储在 span 本身中。 还有一个细微差别,因为字符串是一个不可变的数据结构,Span<char>它不能引用string. 只能string被ReadOnlySpan<char>. Spanes 用于避免内存中不必要的数据复制,即最常用于代码优化。因此,如果目前您对应用程序的性能和内存消耗感到满意,那么考虑跨度还为时过早。 例如,内存中不会复制数据,span 将从与字符串相同的内存位置读取数据。 string text = "hello world"; ReadOnlySpan<char> span = text.AsSpan()[0..5]; // [ 'h', 'e', 'l', 'l', 'o' ] 如果你这样做了,那么复制数据就会发生。 string hello = text.Remove(5); // "hello" 字符串hello是指向内存中新对象的链接,指向它自己的数据。 您还可以使用 为堆栈上的跨度分配内存stackalloc,以避免垃圾收集器的不必要工作,但这是另一回事。
字符串是对不可变的连续内存区域的引用,其中包含:
那是声明
错误的。
Span<char>是一个存储其长度和对某个内存区域的引用的结构。也就是说,在 span 有数据的地方,没有关于长度的信息,长度和指向数据开头的链接都存储在 span 本身中。还有一个细微差别,因为字符串是一个不可变的数据结构,
Span<char>它不能引用string. 只能string被ReadOnlySpan<char>.Spanes 用于避免内存中不必要的数据复制,即最常用于代码优化。因此,如果目前您对应用程序的性能和内存消耗感到满意,那么考虑跨度还为时过早。
例如,内存中不会复制数据,span 将从与字符串相同的内存位置读取数据。
如果你这样做了,那么复制数据就会发生。
字符串
hello是指向内存中新对象的链接,指向它自己的数据。您还可以使用 为堆栈上的跨度分配内存
stackalloc,以避免垃圾收集器的不必要工作,但这是另一回事。