小编Mar*_*och的帖子

C#ReadOnlySpan <char> vs Substring for string dissection

我有一个相当简单的字符串扩展方法,它在我所做的很多字符串操作的系统中经常被调用.我读了这篇文章(String.Substring()似乎是这个代码的瓶颈)并且认为我会尝试相同的方法,看看我是否可以通过改变我读取字符串的方式来找到一些性能.我的结果并不是我所期待的(我期待ReadOnlySpan提供显着的性能提升),我想知道为什么会这样.在我的实际运行代码中,我发现性能略有下降.

我使用我关心的字符生成了一个包含~115万行字符串的文件,在每个字符串上调用方法,并将结果转储到控制台.

我的结果(以毫秒为单位的运行时间)是:

ReadOnlySpan.IndexOf Framework 4.7.1: 68538
ReadOnlySpan.IndexOf Core 2.1: 64486

ReadOnlySpan.SequenceEqual Framework 4.7.1: 63650
ReadOnlySpan.SequenceEqual Core 2.1: 65071

substring Framework 4.7.1: 63508
substring Core 2.1: 64125
Run Code Online (Sandbox Code Playgroud)


代码(从完整框架到核心2.1完全相同):

调用代码:

static void Main(string[] args)
{
    Stopwatch sw = new Stopwatch();
    sw.Start();

    var f = File.ReadAllLines("periods.CSV");

    foreach (string s in f)
    { Console.WriteLine(s.CountOccurrences(".")); }

    sw.Stop();
    Console.WriteLine("Done in " + sw.ElapsedMilliseconds + " ms");
    Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)


我方法的原始子串形式:

public static int CountOccurrencesSub(this string val, string searchFor)
{
    if (string.IsNullOrEmpty(val) || string.IsNullOrEmpty(searchFor))
    { …
Run Code Online (Sandbox Code Playgroud)

c# string

6
推荐指数
2
解决办法
2241
查看次数

标签 统计

c# ×1

string ×1