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

VB.NET-测试空字符串时的性能

如何解决《VB.NET-测试空字符串时的性能》经验,为你挑选了2个好方法。

在VB6中,我被告知在测试空字符串时,通过使用以下方法验证字符串的长度来检查它会快得多:

If Len("ABC") = 0 then 'fast

要么

If LenB("ABC") = 0 then 'even faster

代替:

If "ABC" = "" then 'slower

如果在VB.NET中也是如此,你知道吗?谢谢.



1> robertpnl..:

我不完全是VB的语法,但在C#中你可以使用String静态方法IsNullOrEmpty:

String.IsNullOrEmpty("ABC")

在调试此方法时,它将检查参数的.Length.检查长度总是更快,因为在String比较中,编译器必须创建一个要比较的新对象(在本例中为"ABC"字符串).


它是否使用长度并不真正相关:MS可能会在未来的补丁中更改该实现.更重要的是,这是进行测试的_correct_方式.它可能是一个慢慢的smidgen,但我很怀疑空字符串检查是你的应用程序的瓶颈.
可读性极大地超过了速度问题.这些类型的优化是浪费时间的罕见例外.即使一种方式确实稍微快一点,在未来版本的编译器中也会发生变化.这不是编译器和开发人员之间的合同的一部分.

2> U62..:

这不是必须的,我的意思是你在开玩笑吧?有多少人编写程序来比较一个字符串,看它是否为零长度对性能有任何影响.即使字符串没有保留长度计数并且VB每次都进行了c样式的strcmp()字符串比较,它也不会花费很长的字符串比较函数来计算出其中一个字符串是零长度吗?但.NET字符串确实包含一个长度字段,所以当你进行字符串比较时,首先要检查的是长度是否不同,即直接比较.如果函数调用,那么你自己保存所有这些,然后只有JIT内联Len().

顺便说一句,在VB.NET中,您不需要调用String.IsNullOrEmpty(),因为字符串之间的比较被转换为对String.strcmp()的调用,该调用将nulls(VB中的Nothing)转换为String.EmptyString的引用.然后它继续调用Reflector无法检查的本机函数,但我很确定它首先要做的是检查字符串的长度是否不同.

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