2011-03-04 186 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方法。