如何昂贵是一个GUID演员和比较VS字符串比较 [英] How expensive is a GUID cast and comparison vs a string comparison

查看:100
本文介绍了如何昂贵是一个GUID演员和比较VS字符串比较的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这将是更快?

 布尔相同=(GUID)标识符== ID; 

布尔相同= String.Equals(字符串1,字符串,StringComparison.OrdinalIgnoreCase);


解决方案

我用这个代码:

 对象受害人= Guid.Empty; 
的Guid =目标Guid.NewGuid();

秒表SW =新的秒表();
sw.Start();
的for(int i = 0; I<千万,我++){$​​ B $ B布尔等于=((GUID)受害者)==目标;
}
Console.WriteLine(直接投:{0},sw.Elapsed);

sw.Reset(); sw.Start();
的for(int i = 0; I<千万,我++)
{
布尔等于= Guid.Equals(受害者,目标);
}
Console.WriteLine(Guid.Equals:{0},sw.Elapsed);

sw.Reset(); sw.Start();
字符串= victim.ToString(); //通过了Mikael
字符串B =建议target.ToString();
的for(int i = 0; I<千万,我++)
{
布尔等于= String.Equals(A,B,StringComparison.OrdinalIgnoreCase);
}
Console.WriteLine(String.Equals:{0},sw.Elapsed);

到Console.ReadLine();

和得到这个结果对于不同的值(最好的情况):

 对象受害人= Guid.Empty; 
的Guid =目标Guid.NewGuid();
//直接投:00:00:00.1164198
// Guid.Equals:00:00:02.1268147
// String.Equals:00:00:00.4129527 //噢,我的!

和这个结果为相同的值(更糟糕的情况)

 对象受害人= Guid.Empty; 
的Guid =目标Guid.Empty;
//直接投:00:00:00.2793173
// Guid.Equals:00:00:03.5625948
// String.Equals:00:00:01.7564302


which would be faster?

bool same=(Guid)Identifier==id;

bool same=String.Equals(string1,string2, StringComparison.OrdinalIgnoreCase);

解决方案

I used this code:

object victim = Guid.Empty;
Guid target = Guid.NewGuid();

Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 10000000; i++){
    bool equal = ((Guid) victim) == target;
}
Console.WriteLine("Direct cast   : {0}", sw.Elapsed);

sw.Reset(); sw.Start();
for (int i = 0; i < 10000000; i++)
{
    bool equal = Guid.Equals(victim, target);
}
Console.WriteLine("Guid.Equals   : {0}", sw.Elapsed);

sw.Reset(); sw.Start();
string a = victim.ToString(); // as suggested by Mikael
string b = target.ToString();
for (int i = 0; i < 10000000; i++)
{
    bool equal = String.Equals(a, b, StringComparison.OrdinalIgnoreCase);
}
Console.WriteLine("String.Equals : {0}", sw.Elapsed);

Console.ReadLine();

And got this result for different values (best scenario):

object victim = Guid.Empty;
Guid target   = Guid.NewGuid();
// Direct cast   : 00:00:00.1164198
// Guid.Equals   : 00:00:02.1268147
// String.Equals : 00:00:00.4129527  // oh my!

And this result for same value (worse scenario)

object victim = Guid.Empty;
Guid target   = Guid.Empty;
// Direct cast   : 00:00:00.2793173
// Guid.Equals   : 00:00:03.5625948
// String.Equals : 00:00:01.7564302

这篇关于如何昂贵是一个GUID演员和比较VS字符串比较的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆