2011-03-04 147 views
-1

在.net中,是否对System命名空间中的函数进行的调用通常比正常的函数调用慢得多?我知道,总的来说,“系统调用速度很慢”。但是,在这种情况下,我关心的不是系统调用,而是调用“系统”名称空间。.net系统调用性能

例如,考虑一下我有10000个句子的数组的情况,我想知道他们中哪些以“计算机”这个词开头。对于System.Text.RegularExpressions命名空间拨打10000个电话会更好吗?或者会是更好的显著实施

StartsWithPrefix(ByVal prefix as String, ByVal str as String) As Boolean

功能?

当然,正则表达式本身很慢,但我认为我的问题仍然有意义。

+0

您的性能测试对于这些不同的场景显示了什么结果?因此,衡量并选择更快:-) – 2011-03-04 14:05:50

+0

你从哪里得到你的“一般事实”? “System”命名空间中的代码与其他代码中的代码相比速度慢。你将如何实现你自己的'StartsWithPrefix'方法*而不最终使用像'string.StartsWith'或regexes这样的'System'方法? – 2011-03-04 15:43:37

回答

1

不,没有什么具体的关于在System命名空间中的类型调用方法,使它们变得缓慢。

如果你想找到字符串开头的“计算机”,我会使用

if (foo.StartsWith("computer")) 

你应该考虑排序前缀比较你想要什么,虽然 - 例如,如果你使用:

if (foo.StartsWith("computer", StringComparison.Ordinal)) 

这可能会更快 - 但不是文化敏感。我不知道你的具体情况是否重要,但你应该考虑一下。

2

编号System.xxx命名空间只是一个命名空间,仅此而已。 “

”系统调用速度慢“是”非特权用户模式代码调用特权操作系统代码在操作系统特权部分的进出方式中遭受一些重大开销的简写“。

这不同于“在我的函数名中使用'system'这个词使得它们运行得更慢。”

0

System命名空间中的代码与其他命名空间中的代码非常相似。名称空间不会影响代码的性质或性能。并且大部分System命名空间不需要调用操作系统或其他类型的东西。这只是一堆实用课程。运行时库,如果你愿意。

至于告诉一个字符串是否以给定的前缀开头,你可以使用String.StartsWidth方法。