C#中使用Span进行字符串脱敏的性能优化实践

不晚
不晚
发布时间:2026-10-16| 7人浏览过
原创

Span是.NET中的关键值类型,支持对任意相邻内存区域的安全访问。在处理字符串等高频数据时,结合String.Create使用Span,可以有效减少堆内存分配,从而显著提升程序性能并降低平均执行时间。

什么是Span

System.Span<T> 是一个值类型,能够表示任意相邻的内存区域。无论内存来源是托管对象、非托管互操作内存还是栈内存,它都能提供类似数组的安全访问和高性能操作能力。

  • 非托管内存:直接映射本地代码分配的内存块。
  • 堆栈:用于局部变量,生命周期短且自动回收。
  • 托管内存:允许对堆上的数据进行无拷贝切片操作。

字符串处理中的性能挑战

以用户隐私保护为例,需将用户名中间的字符替换为星号(如:林深鹿 → 林*鹿)。若使用传统的字符串拼接或StringBuilder,在频繁调用时会因不可变性产生大量临时对象,导致GC压力增大和性能下降。

第1步:传统方法实现

虽然逻辑简单,但会触发多次内存分配。下图展示了参数传递的基本结构:

常规做法通常涉及截取前后两部分再拼接,输出结果如下所示:

第2步:基于Span的高性能实现

利用String.Create配合Span,可以在不生成额外字符串实例的情况下完成修改。核心代码如下:

static void Main(string[] args)
{
    Console.WriteLine(ObfuscatePhoneSpan("程序媛小庄"));
}

static string ObfuscatePhoneSpan(string id)
{
    // String.Create 预分配长度并避免中间开销
    return string.Create(id.Length, id, (sc, value) =>
    {
        int n = id.Length / 2;
        // 计算需替换的个数 = (总长) - (20%) - (一半)
        int r = id.Length - (id.Length * 20 / 100) - n;

        // 1. 将原始值复制到目标 Span
        value.AsSpan().CopyTo(sc);
        
        // 2. 截取指定范围并填充 '*' 
        sc.Slice(n, r).Fill('*');
    });
}

该方法的流程为:

  1. 通过value.AsSpan()获取原字符串的视图。
  2. 使用CopyTo将内容一次性写入string.Create提供的输出缓冲区。
  3. 利用Slice定位中间区域,并通过Fill('*')原地替换。

测试基准代码如下:

性能测试结果

经过实际测试,相较于原生API,基于Span的实现无论是在内存占用还是平均耗时上均有明显优势。具体对比数据如下:

总结

C# 的 Span API 提供了一系列低层级工具,使得开发者能够在保留安全性的前提下,接近原生代码的执行效率。在处理高频调用的文本变换任务时,优先使用String.Create结合 Span 是提升性能的有效手段。

以上就是C#中使用Span进行字符串脱敏性能优化的详细内容,更多关于C# Span性能优化的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。