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. Elasticsearch 6.x版本全文检索学习之Search API

    Elasticsearch 6.x版本全文检索学习之Search API. 1).Search API,实现对es中存储的数据进行查询分析,endpoind为_search,如下所示. 方式一.GET ...

  2. 只想听歌曲的高潮部分?让我用python来教你做个音乐高潮提取器!

    有些时候,我们为了设定手机铃声或者发抖音视频时,会耗费大量时间在音乐剪辑上.尤其是想发布大量抖音视频的时候,我们得收集大量的短音乐,这是一个相当耗费时间的工作.那么,这个音乐高潮的提取能不能自动化呢? ...

  3. Flask 教程 第一章:Hello, World!

    本文翻译自The Flask Mega-Tutorial Part I: Hello, World! 一趟愉快的学习之旅即将开始,跟随它你将学会用Python和Flask来创建Web应用.上面的视频包 ...

  4. 2019年上半年收集到的人工智能Python编程干货文章

    2019年上半年收集到的人工智能Python编程干货文章 一文了解Python深拷贝与浅拷贝问题 Python广度优先查找和深度优先查找(内附python教程分享) Python基础之函数2 (参数的 ...

  5. DYNAMICS 365发布所有时候报错:appmodule With Id = a7a513b1-c87d-e911-a83a-000d3a375321 Does Not Exist

    我是微软Dynamcis 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  6. Web安全攻防笔记-SQL注入

    information_schema(MySQL5.0版本之后,MySQL数据库默认存放一个information_schema数据库) information_schema的三个表: SCHEMAT ...

  7. mssql sqlserver 使用SSMS运行sql脚本的六种方法分享

    摘要: 下文讲述五种运行sql脚本的方法,如下所示: 实验环境:sql server 2008 R2 在一次会议讨论中,大家咨询我使用SSMS运行sql脚本的方法,下文我将依次举例讲述sql脚本的运行 ...

  8. Linux 设备树详解【转】

    转自:http://www.pianshen.com/article/428276673/;jsessionid=D90FC6B215155680E0B89A6D060892D4 本文基于天嵌E9V3 ...

  9. adb <-> adbserver <-> JDWP

    简单理一下adb,adbserver,jdwp 之间的关系.角色与相关协议 |    上位机     | USB/TCP |   下位机      | adb <-> adbserver ...

  10. 花了快一天,才搞出来的一个client-go的demo

    用来直接获取所有service的annotaion里有ambassador的东东. 或者,watch集群事件. package main import ( "fmt" " ...