我在写代码,扫描文本的大片段,并且在它执行一些基本的统计数据,如大写和小写字符数,标点符号等为什么我的对象需要很长时间才能创建?
本来我的代码是这样的:
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