c#性能:类型比较与字符串比较

问题描述 投票:4回答:7

哪个更快?这个:

bool isEqual = (MyObject1 is MyObject2)

或此:

bool isEqual = ("blah" == "blah1")

找出哪一个更快会很有帮助。显然,如果像程序员经常将.ToUpper()应用于字符串比较的每一侧,则需要重新分配内存,这会影响性能。但是如果.ToUpper()是否超出上述示例的公式范围呢?

c# .net performance string-comparison
7个回答
10
投票

我有点困惑。

正如其他答案所指出的,您正在比较苹果和橙子。 ::rimshot::

如果要确定对象是否属于某种类型,请使用is运算符。

如果要比较字符串,请使用==运算符(如果需要类似不区分大小写的比较,则可以使用其他合适的比较方法。)>

[一种操作与另一种操作相比没有多快(无双关)似乎并不重要。


仔细阅读后,我认为您想将字符串比较的速度与引用比较的速度(System.Object基本类型中使用的比较类型)进行比较。

如果是这种情况,那么答案就是引用比较永远不会比任何其他字符串比较都慢。 .NET中的引用比较非常类似于在C中比较指针-尽快获得。

但是,如果字符串变量s的值为"I'm a string",但是以下比较失败,您会感觉如何:

if (((object) s) == ((object) "I'm a string")) { ... }

如果您只是比较引用,则可能会根据s值的创建方式而发生。如果最终没有被拘禁,它将与文字字符串没有相同的引用,因此比较将失败。因此,您可能有一个比较快的比较方法,但这种方法并非总是可行。这似乎是一个糟糕的优化。


5
投票

根据该书最大化.NET性能通话


4
投票

第一个用于比较类型而不是值。如果要比较不区分大小写的字符串,可以使用:


0
投票

你告诉我怎么样? :)


0
投票

将字符串与“ ==”运算符进行比较,会将字符串的contents


0
投票

我假设比较第一个示例中的对象将和它获得的结果一样快,因为它只是检查两个对象是否都指向内存中的相同地址。


0
投票

[如果我理解问题,并且您确实

© www.soinside.com 2019 - 2024. All rights reserved.