⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

C# Span<T> 与内存高效处理

学习使用 Span<T> 和 Memory<T> 进行无分配的内存切片操作,提升性能。 · 难度:入门 · +15XP

为什么需要 Span?

在 .NET 中,字符串操作、数组切片等通常会产生内存分配(如 Substring 创建新字符串)。Span<T> 是 C# 7.2 引入的值类型,提供安全的、无分配的内存视图,可以指向数组、堆栈内存或非托管内存。

基本用法

int[] numbers = { 1, 2, 3, 4, 5, 6 };
Span slice = numbers.AsSpan(1, 3);  // 指向索引1开始的3个元素
slice[0] = 99;  // 修改会反映到原数组
Console.WriteLine(string.Join(", ", numbers));  // 1, 99, 3, 4, 5, 6

Span 与字符串

string text = "Hello, World!";
ReadOnlySpan span = text.AsSpan();
ReadOnlySpan hello = span.Slice(0, 5);
Console.WriteLine(hello.ToString());  // "Hello"

性能对比

操作传统方式Span 方式
子字符串Substring → 分配新字符串AsSpan().Slice() → 无分配
数组切片Array.Copy / LINQ SkipAsSpan().Slice()
解析数据Split → 分配数组Span 逐字符解析

Memory<T> 与 Span<T> 的区别

async Task ProcessAsync(Memory memory)
{
    // 异步方法中必须使用 Memory
    await Task.Delay(100);
    Span span = memory.Span;  // 同步方法中获取 Span
}

实用场景

练习提示

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 148 篇
0 完成
🔥 0