[ν] C# CollectionsMarshal.AsSpan μ©λ
μ΄μ² μ°
λ©λͺ¨λ¦¬μ μ κ·Όνλ μ½λμ μ±λ₯μ λμ΄λ €λ©΄, Span<βTβ>(C# 7.2λΆν° μ§μ)μ μ¬μ©νκ² λλ€.
λ§μ½ Tκ° ν΄λμ€ νμ΄ μλλΌ λ³κ²½κ°λ₯ν struct νμ΄κ³ ,
SpanμΌλ‘ λ³νλ κ²μ ν νλͺ©μ κ°μ λ°κΎΈλ κ²½μ°λ₯Ό μ½λ©νμ.
struct Mutable
{
public int Value;
public Mutable()
{
}
}
public static void Run()
{
// μμ±ν λ SpanμΌλ‘ ν λ³ν.
Span<Mutable> spanOfStructs = new Mutable[1] { new Mutable() };
spanOfStructs[0].Value = 42;
Assert.AreEqual(42, spanOfStructs[0].Value);
// λμ€μ SpanμΌλ‘ ν λ³ν.
var listOfStructs = new List<Mutable> { new Mutable() };
//listOfStructs[0].Value = 42; <- Compile Error!
var spanOfStructsAfter = CollectionsMarshal.AsSpan(listOfStructs);
spanOfStructsAfter[0].Value = 42;
Assert.AreEqual(42, spanOfStructsAfter[0].Value);
}
μ μ½λ [μμ±ν λ SpanμΌλ‘ ν λ³ν]μλ μλ¬κ° μμ§λ§,
[λμ€μ SpanμΌλ‘ ν λ³ν]μμλ Mutableμ΄ struct νμ΄μ΄μ μ»΄νμΌ μλ¬κ° μλ€. μ΄λ₯Ό ν΄κ²°νλ €λ©΄,
CollectionsMarshal.AsSpan
μ΄ νμνλ€. λ¬Όλ‘ , Mutableμ΄ class νμ΄λΌλ©΄, μ μ»΄νμΌ μλ¬λ μλ€.
Span μ±λ₯μ λν΄μλ *Faster .NET List loops with CollectionsMarshal.AsSpan*μ μ°Έκ³ νκΈ° λ°λλ€.