potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

C# 9.0 SpanとMemoryの比較

C# 9.0、System.Memory名前空間SpanMemoryの比較です。SpanIEnumerableに変換できず苦労したことから、現在はMemoryびいきの内容になっています。ReadOnlySpanReadOnlyMemoryに関しては適宜読み替えてください。

項目 Span Memory
種類 ref struct struct
メモリ配置 スタック スタックorヒープ
structのメンバー変数 不可能 可能
ref structのメンバー変数 可能 可能
Spanへの変換 可能 可能(Spanプロパティ)
Memoryへの変換 不可能 可能
IEnumerableへの変換 不可能 可能(MemoryMarshal.ToEnumerable
LINQの適用 不可能 可能(IEnumerable経由)
string.Joinの適用 不可能 可能(IEnumerable経由)
ref Tからの作成 可能(MemoryMarshal.CreateSpan 不可能

MemoryMarshalSystem名前空間のクラスです。