using System;
using System.Linq; namespace BenchmarkAndSpanExample
{
public class NameParser
{
public string GetLastName(string fullName)
{
var names = fullName.Split(" "); var lastName = names.LastOrDefault(); return lastName ?? string.Empty;
} public string GetLastNameUsingSubstring(string fullName)
{
var lastSpaceIndex = fullName.LastIndexOf(" ", StringComparison.Ordinal); return lastSpaceIndex == -
? string.Empty
: fullName.Substring(lastSpaceIndex + );
} public ReadOnlySpan<char> GetLastNameWithSpan(ReadOnlySpan<char> fullName)
{
var lastSpaceIndex = fullName.LastIndexOf(' ');
return lastSpaceIndex == -
? ReadOnlySpan<char>.Empty
: fullName.Slice(lastSpaceIndex + );
}
}
}
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Order; namespace BenchmarkAndSpanExample
{
[RankColumn]
[Orderer(SummaryOrderPolicy.FastestToSlowest)]
[MemoryDiagnoser]
public class NameParserBenchmarks
{
private const string FullName = "Steve J Gordon";
private static readonly NameParser Parser = new NameParser(); [Benchmark(Baseline = true)]
public void GetLastName()
{
Parser.GetLastName(FullName);
} [Benchmark]
public void GetLastNameUsingSubstring()
{
Parser.GetLastNameUsingSubstring(FullName);
} [Benchmark]
public void GetLastNameWithSpan()
{
Parser.GetLastNameWithSpan(FullName);
}
}
}
    public class Program
{
public static void Main(string[] args)
{
var summary = BenchmarkRunner.Run<NameParserBenchmarks>();
}
}

关于 ReadOnlySpan<T>的更多相关文章

  1. .Net Core中使用ref和Span<T>提高程序性能

    一.前言 其实说到ref,很多同学对它已经有所了解,ref是C# 7.0的一个语言特性,它为开发人员提供了返回本地变量引用和值引用的机制. Span也是建立在ref语法基础上的一个复杂的数据类型,在文 ...

  2. C#的发展历程第五 - C# 7开始进入快速迭代道路

    C# 7开始,C#加快了迭代速度,多方面的打磨让C#在易用性,效率等各方面都向完美靠近.另外得益于开源,社区对C#的进步也做了很大共享.下面带领大家看看C# 7的新特性.其中一部分是博主已经使用过,没 ...

  3. C# - Span 全面介绍:探索 .NET 新增的重要组成部分

    假设要公开特殊化排序例程,以就地对内存数据执行操作.可能要公开需要使用数组的方法,并提供对相应 T[] 执行操作的实现.如果方法的调用方有数组,且希望对整个数组进行排序,这样做就非常合适.但如果调用方 ...

  4. Span<T>

    Introduction Span<T> is a new type we are adding to the platform to represent contiguous regio ...

  5. C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】

    C#7.2——编写安全高效的C#代码 2018-11-07 18:59 by 沉睡的木木夕, 123 阅读, 0 评论, 收藏, 编辑 原文地址:https://docs.microsoft.com/ ...

  6. KMP algorithm challenge string.Contains

    KMP: public int KMP (ReadOnlySpan<char> content, ReadOnlySpan<char> span) { _next = new ...

  7. 实际体验Span<T> 的惊人表现

    前言 最近做了一个过滤代码块功能的接口.就是获取一些博客文章做文本处理,然后这些博客文章的代码块太多了,很多重复的代码关键词如果被拿过来处理,那么会对文本的特征表示已经特征选择会有很大的影响.所以需要 ...

  8. .NET Core 的 Span<T> 学习与使用笔记

    一.阅读材料 All About Span: Exploring a New .NET Mainstay Span<T> - byte to int conversions Span< ...

  9. C#7.2——编写安全高效的C#代码

    原文地址:https://docs.microsoft.com/zh-cn/dotnet/csharp/write-safe-efficient-code?view=netcore-2.1 值类型的优 ...

随机推荐

  1. 计时 答题 demo

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  2. 关于EFCore线程内唯一

    EntityFramework的线程内唯一 EntityFramework的线程内唯一是通过httpcontext来实现的 public static DbContext DbContext() { ...

  3. SQL Server中的LEFT、RIGHT函数

    SQL Server中的LEFT.RIGHT函数. LEFT:返回字符串中从左边开始指定个数字符. LEFT(character_expression,integer_expression); RIG ...

  4. 控件类——UIControl(其子类、属性)

    UIControl : 控制类->触摸一个视图 ,执行某个任务 点击某个视图,触发一个事件 UIControl:是一个可以带有触发事件的视图. 主要内容: 0.UIContorl ->的子 ...

  5. android ANR 分析定位问题

    ANR ? android 规定,Activity如果5秒钟之内无法响应屏幕触摸事件或者键盘输入事件,BroadcastReceiver 如果10s中之内还未执行完操作就会出现ANR 定位ANR问题 ...

  6. Autofac 应用于IIS托管的WEB程序,注册程序集被回收的问题

    现项目开始全面接入Autofac,但上线了后发现,iis进程被回收后,在访问网页提示找不到注册在Autofac中的类型,或者实例.现在处理办法记录如下: 1. IIS托管的应用程序,在首次加载时,所有 ...

  7. Python—内置三大装饰器(@staticmethod、@classmethod、@property)

    https://blog.csdn.net/weixin_42681866/article/details/83376484 https://blog.csdn.net/weixin_43265804 ...

  8. [Go] 利用有缓存channel控制同时并发的数量

    如果有一个大循环,里面每一个都开启groutine,那么瞬间就会开启非常多的groutine,要解决这个问题就要用channel的阻塞特性来解决 package main import "t ...

  9. 实时SSH网络吞吐量测试

    centos 需要epel 源安装pv 软件,debian 需要安装pv 软件 #测试本机到192.168.1.158 的实时速率 yes | pv | ssh 192.168.1.158 " ...

  10. CodeForces - 1251E2 (思维+贪心)

    题意 https://vjudge.net/problem/CodeForces-1251E2 一共有 n 个选民,你可以付出 pi​ 的代价让第 i 个选民为你投票,或者,在为你投票的人数达到 mi ...