当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《c#性能:类型比较与字符串比较》经验,为你挑选了2个好方法。

哪个更快?这个:

bool isEqual = (MyObject1 is MyObject2)

或这个:

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

找出哪一个更快会有所帮助.显然,如果你将.ToUpper()应用于字符串比较的每一边,就像程序员经常做的那样,那就需要重新分配影响性能的内存.但是,如果.ToUpper()不像上面的样本那样怎么样?



1> Michael Burr..:

我在这里有点困惑.

正如其他答案所指出的那样,你要比较苹果和橘子. ::rimshot::

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

如果你想比较字符串,可以使用==运算符(或者如果你需要像不区分大小写的比较那样花哨的话,可以使用其他适当的比较方法).

一个操作与另一个操作相比的速度(没有双关语)似乎并不重要.


仔细阅读之后,我认为您希望将字符串比较的速度与参考比较的速度(System.Object基类型中使用的比较类型)进行比较.

如果是这种情况,那么答案是参考比较永远不会比任何其他字符串比较慢..NET中的参考比较非常类似于比较C中的指针 - 大约和你能得到的一样快.

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

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

如果您只是比较引用,则可能会发生这种情况,具体取决于s创建值的方式.如果它最终没有被实现,它将没有与文字字符串相同的引用,因此比较将失败.所以你可能有一个更快的比较,并不总是有效.这似乎是一个糟糕的优化.


其他答案错过了关键点,即"是"运算符不会像提问者所认为的那样做任何事情.

2> Frode Liller..:

根据书中最大化.NET性能的电话

bool isEqual = String.Equals("test", "test");

性能相同

bool isEqual = ("test" == "test");

电话

bool isEqual = "test".Equals("test");

理论上比调用静态String.Equals方法慢,但我认为你需要比较几百万个字符串才能真正检测到速度差异.

我给你的小费是这个; 不要担心哪种字符串比较方法更慢或更快.在正常的应用程序中,您永远不会注意到差异.您应该使用您认为最具可读性的方式.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有