什么在.NET中使用IsNumeric()这么长时间?

时间:2009-02-16 18:17:26

标签: vb.net performance isnumeric

今天正在与IsNumeric进行一些基准测试,并将其与以下功能进行比较:

Private Function IsNumeric(ByVal str As String) As Boolean
    If String.IsNullOrEmpty(Str) Then Return False
    Dim c As Char

    For i As Integer = 0 To Str.Length - 1
        c = Str(i)
        If Not Char.IsNumber(c) Then Return False
    Next

    Return True
End Function

我对结果感到非常惊讶。 使用数值时,这个数字比常规IsNumeric()快8到10倍,而使用空数字或非数字值则快1000-1500倍。

IsNumeric的使用时间如此之长?在用上面的功能替换之前,我应该考虑一些其他问题吗? 我在我的网站上的大约50个不同的地方使用IsNumeric,主要用于验证表单和查询字符串。

4 个答案:

答案 0 :(得分:15)

您检查特定于语言环境的分隔符和小数位在哪里?否定?指数表示法?

你知道,你的函数只是数字字符串的一小部分。

1,000,000.00
1,5E59
-123456789

你错过了所有这些。

答案 1 :(得分:0)

单个字符只能包含0,1,2,3,4,5,6,7,8,9

但完整字符串可能包含以下任何内容:

1
1234
12.34
-1234
-12.34
0001

所以IsNumeric应该有点慢。

还有文化和国际化问题。即如果您正在处理Unicode字符串,IsNumeric是否也处理所有其他语言的数字?

答案 2 :(得分:0)

一般来说,我会避免重复或替换像这样的语言功能,特别是在像VB这样的语言中,必然要为你实现许多用例。至少,我会将你的方法命名为不同的,这样就不会让其他开发人员感到困惑。

速度差异必然是您的代码所做的工作远远少于VB语言功能。

答案 3 :(得分:0)

我会根据您使用的数据类型使用

Integer.TryParse()
Double.TryParse()
,因为这两者都会导致区域差异。