我在寫代碼,掃描文本的大片段,並且在它執行一些基本的統計數據,如大寫和小寫字符數,標點符號等爲什麼我的對象需要很長時間才能創建?
本來我的代碼是這樣的:
foreach (var character in stringToCount)
{
if (char.IsControl(character))
{
controlCount++;
}
if (char.IsDigit(character))
{
digitCount++;
}
if (char.IsLetter(character))
{
letterCount++;
} //etc.
}
然後從那裏我創建一個新的對象這樣,只讀取局部變量,並將它們傳遞給構造函數:
var result = new CharacterCountResult(controlCount, highSurrogatecount, lowSurrogateCount, whiteSpaceCount,
symbolCount, punctuationCount, separatorCount, letterCount, digitCount, numberCount, letterAndDigitCount,
lowercaseCount, upperCaseCount, tempDictionary);
但是在代碼審查堆棧可置換用戶在安吉指出我可以做以下事情。太好了,我爲自己節省了一大堆代碼。
var result = new CharacterCountResult(stringToCount.Count(char.IsControl),
stringToCount.Count(char.IsHighSurrogate), stringToCount.Count(char.IsLowSurrogate),
stringToCount.Count(char.IsWhiteSpace), stringToCount.Count(char.IsSymbol),
stringToCount.Count(char.IsPunctuation), stringToCount.Count(char.IsSeparator),
stringToCount.Count(char.IsLetter), stringToCount.Count(char.IsDigit),
stringToCount.Count(char.IsNumber), stringToCount.Count(char.IsLetterOrDigit),
stringToCount.Count(char.IsLower), stringToCount.Count(char.IsUpper), tempDictionary);
然而創建第二個方式大約需要(我的機器上)對象的額外〜200ms的。
這怎麼可能?儘管看起來不是很多額外的時間,但是當我離開它處理文本時,它很快就會加起來。
我應該做什麼不同?
第一種方法迭代字符串一次,第二種迭代字符串13次。字符串有多大?如果是10K以上的字符,則只需迭代所有字符就可能花費不少的時間。 – 2014-09-27 01:38:59
我不知道在這裏使用'LINQ'會更快嗎? – rhughes 2014-09-28 14:57:10