哪个更快?这个:
bool isEqual = (MyObject1 is MyObject2)
或这个:
bool isEqual = ("blah" == "blah1")
找出哪一个更快会有所帮助.显然,如果你将.ToUpper()应用于字符串比较的每一边,就像程序员经常做的那样,那就需要重新分配影响性能的内存.但是,如果.ToUpper()不像上面的样本那样怎么样?
我在这里有点困惑.
正如其他答案所指出的那样,你要比较苹果和橘子. ::rimshot::
如果要确定某个对象是否属于某种类型,请使用该is
运算符.
如果你想比较字符串,可以使用==
运算符(或者如果你需要像不区分大小写的比较那样花哨的话,可以使用其他适当的比较方法).
一个操作与另一个操作相比的速度(没有双关语)似乎并不重要.
仔细阅读之后,我认为您希望将字符串比较的速度与参考比较的速度(System.Object基类型中使用的比较类型)进行比较.
如果是这种情况,那么答案是参考比较永远不会比任何其他字符串比较慢..NET中的参考比较非常类似于比较C中的指针 - 大约和你能得到的一样快.
但是,如果字符串变量s
具有该值"I'm a string"
,您会感觉如何,但以下比较失败:
if (((object) s) == ((object) "I'm a string")) { ... }
如果您只是比较引用,则可能会发生这种情况,具体取决于s
创建值的方式.如果它最终没有被实现,它将没有与文字字符串相同的引用,因此比较将失败.所以你可能有一个更快的比较,并不总是有效.这似乎是一个糟糕的优化.
根据书中最大化.NET性能的电话
bool isEqual = String.Equals("test", "test");
性能相同
bool isEqual = ("test" == "test");
电话
bool isEqual = "test".Equals("test");
理论上比调用静态String.Equals方法慢,但我认为你需要比较几百万个字符串才能真正检测到速度差异.
我给你的小费是这个; 不要担心哪种字符串比较方法更慢或更快.在正常的应用程序中,您永远不会注意到差异.您应该使用您认为最具可读性的方式.