不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
再谈两种不同字符串比较方法的性能对比
编辑:dnawo 日期:2009-06-05
以前曾经动笔写过一片《字符串比较方法的性能对比》的文章,很多朋友提出了非常好的意见和建议。碰巧最近看到好多人在这样比较字符串
似乎很有意思,大家都喜欢另辟蹊径的使用字符串比较,为了较为客观的反应各种字符串比较的优势,我特地做了一个本地测试,分别区分字符串长度一致以及长度不一致的情况,另外每种情况下还对字符串的比较方式上使用4种不同方法:
1、使用地球人都知道的“==”比较运算符
2、使用String.Compare方法,即上面提到的代码
3、使用string.Equals(string,StringComparison.Ordinal)方法
4、使用string.Equals(a, b, StringComparison.OrdinalIgnoreCase)方法
当然第三种方法是在不区分大小写和语言区域的情况下,每次进行1K万次比较。首先来看第一种场景,即字符串长度一致,但是内容不一致的情况。
使用比较的字符串用例为:
string a = "abcdefghigklmnopqrstuvwxyz0123457689";
string b = "abcdefghigklmnopqrstuv0123wxyz457689";
1、“==” :0.3239秒
2、使用String.Compare方法:1.8457秒
3、使用string.Equals(a, b, StringComparison.OrdinalIgnoreCase)方法 :1.6891秒
4、使用a.Equals(b, StringComparison.OrdinalIgnoreCase)方法 :1.6764秒
使用比较的字符串用例为:
string a = "abcdefghigklmnopqrstuvwxyz0123457689字符串比较方法";
string b = "abcdefghigklmnopqrstuvwxyz0123457689字符比较方法";
1、“==” :0.1766秒
2、使用String.Compare方法:.3.1811秒
3、使用string.Equals(a, b, StringComparison.OrdinalIgnoreCase)方法 :0.1093秒
4、使用a.Equals(b, StringComparison.OrdinalIgnoreCase)方法 :0.1112秒
比较的示例代码如下:
从比较的结果来看,使用最常用的“==”判断还是很有优势的,至少在各方面可以找到一个平衡点。在第二个场景中之所以第3、4测试方法比直接用“==”判断快的原因是,测试方法3,4首先检查了字符串的长度,如下代码:
虽然有的书籍中介绍第4中方法会很快,但是至少从实际测试上来看却不是这样。此外,在进行WCF的WebService1.0的测试中并没有向微软宣称的那样比不是用WCF速度和性能上有明显的提升,只不过是旗鼓相当。不知道后续会有什么进展。
复制内容到剪贴板
程序代码

if (string.Compare(keyState, "M", true, CultureInfo.InvariantCulture) == 0) {
似乎很有意思,大家都喜欢另辟蹊径的使用字符串比较,为了较为客观的反应各种字符串比较的优势,我特地做了一个本地测试,分别区分字符串长度一致以及长度不一致的情况,另外每种情况下还对字符串的比较方式上使用4种不同方法:
1、使用地球人都知道的“==”比较运算符
2、使用String.Compare方法,即上面提到的代码
3、使用string.Equals(string,StringComparison.Ordinal)方法
4、使用string.Equals(a, b, StringComparison.OrdinalIgnoreCase)方法
当然第三种方法是在不区分大小写和语言区域的情况下,每次进行1K万次比较。首先来看第一种场景,即字符串长度一致,但是内容不一致的情况。
使用比较的字符串用例为:
string a = "abcdefghigklmnopqrstuvwxyz0123457689";
string b = "abcdefghigklmnopqrstuv0123wxyz457689";
1、“==” :0.3239秒
2、使用String.Compare方法:1.8457秒
3、使用string.Equals(a, b, StringComparison.OrdinalIgnoreCase)方法 :1.6891秒
4、使用a.Equals(b, StringComparison.OrdinalIgnoreCase)方法 :1.6764秒
使用比较的字符串用例为:
string a = "abcdefghigklmnopqrstuvwxyz0123457689字符串比较方法";
string b = "abcdefghigklmnopqrstuvwxyz0123457689字符比较方法";
1、“==” :0.1766秒
2、使用String.Compare方法:.3.1811秒
3、使用string.Equals(a, b, StringComparison.OrdinalIgnoreCase)方法 :0.1093秒
4、使用a.Equals(b, StringComparison.OrdinalIgnoreCase)方法 :0.1112秒
比较的示例代码如下:
复制内容到剪贴板
程序代码

Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < 10000000; i++)
{
int r = String.Compare(a, b, true, CultureInfo.InvariantCulture);
}
watch.Stop();
double time;
time = watch.Elapsed.TotalSeconds;
Console.WriteLine("String.Compare costs {0}", time);
watch.Start();
for (int i = 0; i < 10000000; i++)
{
int r = String.Compare(a, b, true, CultureInfo.InvariantCulture);
}
watch.Stop();
double time;
time = watch.Elapsed.TotalSeconds;
Console.WriteLine("String.Compare costs {0}", time);
从比较的结果来看,使用最常用的“==”判断还是很有优势的,至少在各方面可以找到一个平衡点。在第二个场景中之所以第3、4测试方法比直接用“==”判断快的原因是,测试方法3,4首先检查了字符串的长度,如下代码:
复制内容到剪贴板
程序代码

case StringComparison.OrdinalIgnoreCase:
if (a.Length != b.Length)
{
return false;
}
if (a.IsAscii() && b.IsAscii())
{
return (nativeCompareOrdinal(a, b, true) == 0);
}
return (TextInfo.CompareOrdinalIgnoreCase(a, b) == 0);
if (a.Length != b.Length)
{
return false;
}
if (a.IsAscii() && b.IsAscii())
{
return (nativeCompareOrdinal(a, b, true) == 0);
}
return (TextInfo.CompareOrdinalIgnoreCase(a, b) == 0);
虽然有的书籍中介绍第4中方法会很快,但是至少从实际测试上来看却不是这样。此外,在进行WCF的WebService1.0的测试中并没有向微软宣称的那样比不是用WCF速度和性能上有明显的提升,只不过是旗鼓相当。不知道后续会有什么进展。






评论: 0 | 引用: 0 | 查看次数: 3541
发表评论
请登录后再发表评论!