(我的道歉,這是第二個帖子Most efficient way to determine if a string length != 0?但我無法弄清楚如何回答別人的答案,我的答覆變成張貼的「答案」)C#4.0,確定字符串長度!= 0的最有效方法?第2部分
理想情況下,我在尋找什麼因爲是進行以下操作的最有效的算法(將被稱爲1億次+)。我使用C#4.0
轉動字符串: 「ABCDE」 到陣列: 字符串[ 「A」, 「B」, 「C」, 「d」, 「E」]
我的算法如下:
public string[] SplitOnMultiSpaces(string text)
{
if (string.IsNullOrEmpty(text)) return new string[0];
var split = text.Split(' ');
int length = split.Length;
var data = new string[length];
int index = 0;
for (int i = 0; i<length; i++)
{
if (split[i].Length != 0)
{
data[index++] = split[i];
}
}
return data;
}
我的問題是,當我資料這個反對100000個字符串,它需要1.04秒執行。
如果我註釋掉「if(split [i] .Length!= 0)」檢查,則只需要0.2秒。
有人可以告訴我爲什麼這個(簡單)查詢對字符串採取80%的TOTAL執行時間? (特別是,因爲我期望其他地區使用更多的CPU)我唯一的想法是C#正在試圖計算字符串長度,人們告訴我不是這種情況(它更像VB字符串我猜?)。但是這對於時間開銷是沒有意義的。
我考慮試圖看看split [i] [0]是否存在,但依靠異常會減慢WAAAAAAY的效果。
P.S. - 我的算法還受到這樣的影響,返回的數組通常比所需要的大,但這似乎不是太大的開銷。
出於好奇,如果你關心速度,爲什麼你使用C#? C++或C可能會讓你顯着提高速度。 – riwalk 2010-08-02 18:34:18
當您對其進行配置時,請確保Visual Studio未附加。它可能突然變得快了很多倍。 (或者它可能不會,那真的取決於。) – 2010-08-02 18:34:20
要回復你需要點擊人員下面的小'添加評論'鏈接 – 2010-08-02 18:34:25