C# 是否可以使用ReadOnlySpan<;从字符串解析int;char>;
在解析C# 是否可以使用ReadOnlySpan<;从字符串解析int;char>;,c#,C#,在解析int字符串中的int数据时,是否有方法使用ReadOnlySpan?比如int.Parse(str.AsSpan().Slice(2,3)) 因为如果int数据位于字符串的中间,比如,人类有206个骨头“< /代码>”,那么我必须先做一个子串,然后把它传递给 int(PARSE)(< /代码>)。在这种情况下,使用Span似乎合乎逻辑。是的,这是可能的(我使用了.NET Core 3.0): 如果您查看有关int.Parse的文档,您会注意到在.NET Core 2.1及更新版本中有一个
int
字符串中的int
数据时,是否有方法使用ReadOnlySpan
?比如int.Parse(str.AsSpan().Slice(2,3))
因为如果int数据位于字符串的中间,比如<代码>,人类有206个骨头“< /代码>”,那么我必须先做一个子串,然后把它传递给<代码> int(PARSE)(< /代码>)。在这种情况下,使用
Span
似乎合乎逻辑。是的,这是可能的(我使用了.NET Core 3.0):
如果您查看有关int.Parse的文档,您会注意到在.NET Core 2.1及更新版本中有一个接受ReadOnlySpan的重载…更令人印象深刻的是分配内存的减少。子字符串分配,而Span不分配。如果您经常这样做,将大大减少垃圾收集时间。
var text = "Humans have 206 bones";
ReadOnlySpan<char> asSpan = text.AsSpan();
var number = int.Parse(asSpan.Slice(12, 3));
| Method | N | Mean | Error | StdDev | Ratio |
|---------------- |-------- |-----------------:|----------------:|----------------:|------:|
| Substring | 1 | 31.14 ns | 0.0422 ns | 0.0374 ns | 1.00 |
| AsSpanThenSlice | 1 | 25.34 ns | 0.0519 ns | 0.0485 ns | 0.81 |
| AsSpanInOne | 1 | 19.51 ns | 0.0544 ns | 0.0425 ns | 0.63 |
| | | | | | |
| Substring | 1000 | 31,662.81 ns | 48.0289 ns | 44.9262 ns | 1.00 |
| AsSpanThenSlice | 1000 | 25,715.43 ns | 20.8666 ns | 17.4245 ns | 0.81 |
| AsSpanInOne | 1000 | 18,344.96 ns | 15.3018 ns | 12.7777 ns | 0.58 |
| | | | | | |
| Substring | 1000000 | 68,811,376.67 ns | 135,815.2457 ns | 127,041.6651 ns | 1.00 |
| AsSpanThenSlice | 1000000 | 44,843,871.11 ns | 97,723.9653 ns | 91,411.0578 ns | 0.65 |
| AsSpanInOne | 1000000 | 38,622,410.65 ns | 27,490.1451 ns | 22,955.5162 ns | 0.56 |