[C#].NET中字符串的 ToLower,ToUpper,ToLowerInvariant,ToUpperInvariant 性能测试及分析...

本文通过测试分析了C#中字符串的ToLower, ToUpper, ToLowerInvariant, ToUpperInvariant四种方法的性能,结果显示ToLowerInvariant和ToUpperInvariant由于不考虑语言文化信息,性能优于ToLower和ToUpper,但Char.ToUpper的性能反而比ToLower差。尽管存在性能差异,但在实际开发中,尤其是国际化应用中,考虑到可能引入的隐形BUG,开发者不应过分关注这些细微的性能差异,应根据具体需求选择合适的方法。" 112537833,10539711,Python爬虫:webscraper教程转PDF实战,"['Python爬虫', '网页爬取', 'PDF生成', '数据提取']
摘要由CSDN通过智能技术生成

我最近在研读《CLR via C#》,其中有一个章节讲String类型,Jeffrey说当进行不区分大小写的字符串对比时,应当尽量多的使用ToUpperInvariant,因为一方面CLR对转换为大写的操作进行了专门的优化,使其性能更加卓越;另一方面ToUpperInvariant和ToLowerInvariant忽略了对语言文化的处理,因此性能比ToUpper和ToLower要快得多。

从理论层面上来讲,这应该是正确的。但是究竟能快多少呢?或者说这种性能提升值不值得我们付出专门的精力来关注呢?

我们下面就进行一个测试,看看它们究竟能对性能产生多大影响。

首先,我实例化了一个 char 类型数组,并使用 Char Code 在 0 到 133 之间的随机字符填满,我们就得到了一个随机的测试用例,其中包含半角符号、小写英文字母和大写英文字母。

然后我要分别测试 Char 类型的四个静态函数和 String 类型的四个实例函数,我猜测 String 类型中的实例函数实际上也是通过 Char 类型中相对应的静态函数实现的。

为了避免CLR的内存优化对测试结果产生影响,每执行一项测试之前,都将在堆中创建新的示例,并从测试用例中复制成员。

除此之外,为了尽量保证测试结果的正确性,我将循环执行并记录测试代码 N 次,之后取它们的去权平均值。

=====================我是分割线=====================

下面是测试代码:

填充数组:

 1 static void Fill()
 2  {
 3     //实例化一个容纳10000个字符的数组
 4     letters = new char[maxElementsCount];
 5     //填充数组
 6     for (int i = 0; i < maxElementsCount; i++)
 7     {
 8         var charcode = R.Next(0, 133);
 9         letters[i] = Convert.ToChar(charcode);
10     }
11 }

 

执行 Char 静态方法测试的执行函数:

 1  static double Invoke(Action<char[]> func,string testname)
 2 {
 3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值