gpt4 book ai didi

c# - 为什么是 str = str.Replace().Replace();比 str = str.Replace(); 快str = str.替换()?

转载 作者:太空狗 更新时间:2023-10-30 00:01:14 27 4
gpt4 key购买 nike

我正在做一个本地测试来比较 C# 中 String 和 StringBuilder 的 Replace 操作性能,但是对于 String 我使用了以下代码:

String str = "String to be tested. String to be tested. String to be tested."
str = str.Replace("i", "in");
str = str.Replace("to", "ott");
str = str.Replace("St", "Tsr");
str = str.Replace(".", "\n");
str = str.Replace("be", "or be");
str = str.Replace("al", "xd");

但是,在注意到 String.Replace() 比 StringBuilder.Replace() 更快之后,我开始针对上面的代码测试以下代码:

String str = "String to be tested. String to be tested. String to be tested."
str = str.Replace("i", "in").Replace("to", "ott").Replace("St", "Tsr").Replace(".", "\n").Replace("be", "or be").Replace("al", "xd");

最后一个结果快了大约 10% 到 15% 倍,关于为什么它更快有什么想法吗?为同一个变量赋值是否很昂贵?

最佳答案

我做了这个基准:

namespace StringReplace
{
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;

public class Program
{
static void Main(string[] args)
{
BenchmarkRunner.Run<Program>();
}

private String str = "String to be tested. String to be tested. String to be tested.";

[Benchmark]
public string Test1()
{
var a = str;
a = a.Replace("i", "in");
a = a.Replace("to", "ott");
a = a.Replace("St", "Tsr");
a = a.Replace(".", "\n");
a = a.Replace("be", "or be");
a = a.Replace("al", "xd");

return a;
}

[Benchmark]
public string Test2()
{
var a = str;
a = a.Replace("i", "in").Replace("to", "ott").Replace("St", "Tsr").Replace(".", "\n").Replace("be", "or be").Replace("al", "xd");

return a;
}
}
}

结果:

BenchmarkDotNet=v0.10.0
OS=Microsoft Windows NT 6.2.9200.0
Processor=Intel(R) Core(TM) i7-7700 CPU 3.60GHz, ProcessorCount=8
Frequency=3515629 Hz, Resolution=284.4441 ns, Timer=TSC
Host Runtime=Clr 4.0.30319.42000, Arch=32-bit RELEASE
GC=Concurrent Workstation
JitModules=clrjit-v4.7.2600.0
Job Runtime(s):
Clr 4.0.30319.42000, Arch=32-bit RELEASE


Method | Mean | StdDev | Median |
------- |---------- |---------- |---------- |
Test1 | 1.3768 us | 0.0354 us | 1.3704 us |
Test2 | 1.3941 us | 0.0325 us | 1.3778 us |

如您所见, Release模式下的结果是相同的。所以,我认为由于变量的过度分配, Debug模式可能会有很小的差异。但在 Release模式下,编译器可以对其进行优化。

关于c# - 为什么是 str = str.Replace().Replace();比 str = str.Replace(); 快str = str.替换()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50979466/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com