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 |