利用Span无gc地传递数组参数

delegate void SpanHandler(Span<int> span);
class A {
    public int id;
    public event  SpanHandler e;

    public void Set()
    {
        Span<int> span = stackalloc int[1]{id};
        e.Invoke(span);
    }

    public A CreateChild(int id)
    {
        var child = new A(){id = id};
        child.e += (span) => {
            Span<int> span2 = stackalloc int[span.Length +1];
            span.CopyTo(span2);
            span2[^1] = this.id;
            e.Invoke(span2);
        };
        return child;
    }    
}

var  a = new A() { id = 1 };
var b = a.CreateChild( 2);
var c = b.CreateChild( 3);
var d = c.CreateChild( 4);
a.e += (span) => {
    Console.WriteLine(string.Join(",", span.ToArray()));
};
b.Set();
c.Set();
d.Set();
----------
output:
2,1
3,2,1
4,3,2,1
posted @ 2025-08-02 10:57  Fallever  阅读(9)  评论(0)    收藏  举报