哪个更快?这:c#性能:类型比较与字符串比较
bool isEqual = (MyObject1 is MyObject2)
或者这样:
bool isEqual = ("blah" == "blah1")
这将有助于找出哪一个更快。显然,如果你像程序员经常做的那样将.ToUpper()应用到字符串比较的每一侧,那就需要重新分配影响性能的内存。但是如果.ToUpper()与上面的示例中的等式不同,那么该怎么办?
哪个更快?这:c#性能:类型比较与字符串比较
bool isEqual = (MyObject1 is MyObject2)
或者这样:
bool isEqual = ("blah" == "blah1")
这将有助于找出哪一个更快。显然,如果你像程序员经常做的那样将.ToUpper()应用到字符串比较的每一侧,那就需要重新分配影响性能的内存。但是如果.ToUpper()与上面的示例中的等式不同,那么该怎么办?
你如何告诉我? :)
从this Coding Horror post取得代码,并插入代码以代替他的算法进行测试。
第一个用于比较类型而不是值。 如果你想比较非敏感字符串的情况下,你可以使用:
string toto = "toto";
string tata = "tata";
bool isEqual = string.Compare(toto, tata, StringComparison.InvariantCultureIgnoreCase) == 0;
Console.WriteLine(isEqual);
据该书最大化.NET性能 通话
bool isEqual = String.Equals("test", "test");
在性能上等同于
bool isEqual = ("test" == "test");
致电
bool isEqual = "test".Equals("test");
在理论上比调用静态String.Equals方法要慢,但我认为您需要比较几百万个字符串才能真正检测速度差异。
我的建议是这样的;不要担心哪个字符串比较方法更慢或更快。在一个正常的应用程序中,你将永远不会注意到这种差异你应该用你认为最具可读性的方式。
与“==”操作符比较字符串比较内容的字符串与字符串对象参考的。比较对象将调用对象的“Equals”方法来确定它们是否相等。 Equals的默认实现是进行参考比较,如果两个对象引用是相同的物理对象,则返回True。这可能会比字符串比较更快,但取决于被比较的对象的类型。
我在这里有点困惑。
正如其他答案已经指出,你正在比较苹果和橘子。 ::rimshot::
如果要确定对象是否属于某种类型,请使用is
运算符。
如果您想比较字符串,请使用==
运算符(或其他适当的比较方法,如果您需要像大小写不区分大小写的比较)。
一个操作与另一个操作相比有多快(无双关语)似乎并不重要。
仔细阅读后,我认为,要串comparisions的速度与基准比较的速度(在System.Object的基本类型中使用的比较类型)进行比较。
如果是这样,那么答案是参考比较决不会比任何其他字符串比较慢。 .NET中的参考比较与C中的指针比较非常类似 - 大概可以得到。
但是,你怎么会觉得如果一个字符串变量s
的值为"I'm a string"
,但下面的比较失败:
if (((object) s) == ((object) "I'm a string")) { ... }
如果单纯比较基准,即可能发生的事情取决于s
值是如何创建。如果最终没有被执行,它将不会与文字字符串具有相同的引用,所以比较会失败。所以你可能有一个更快的比较,并不总是奏效。这似乎是一个糟糕的优化。
其他答案已经错过了关键点,即“is”操作符不会像提问者认为的那样做任何事情。 – 2008-11-15 01:48:47
我假设比较你的第一个例子中的对象的速度要快,因为它只是检查两个对象是否指向内存中的相同地址。
正如已经多次提到过的那样,也可以比较字符串上的地址,但如果两个字符串是从不同的来源分配的,则这不一定有效。
最后,它通常是很好的形式,只要有可能,就尝试和比较基于类型的对象。它通常是最具体的识别方法。如果你的对象需要用内存中的地址以外的东西来表示,那么可以使用其他属性作为标识符。
你错过了“is”运算符的含义,我想呢? – 2009-12-28 10:48:39
如果我没有理解这个问题,你真的想比较基准平等普通的老“比较内容”:建立一个测试用例,并呼吁object.ReferenceEquals反对== B的情况。
注意:您的有以了解它们之间的区别,并且您可能无法在大多数情况下使用参考比较。如果你确定这是你想要的,可能快一点。你必须自己尝试一下,并评估这是否值得麻烦。
是Nicholas J. Wienholt的作者?你会认为这是一个推荐阅读? – JSWork 2011-05-02 21:04:31