我有一个文档,其中的单词将由空格分隔和提取。为此,我使用了以下代码。
string[] words = s.Split(' ');
现在的问题是我要将此代码用于搜索引擎的解析器。正因为如此,将有数十万甚至数百万的网页需要拆分成单词。
我是否担心使用上述代码该过程可能需要很长时间,或者它是没有根据的。如果它是正确的,任何关于替代可扩展解决方案的建议都将受到欢迎。
我有一个文档,其中的单词将由空格分隔和提取。为此,我使用了以下代码。
string[] words = s.Split(' ');
现在的问题是我要将此代码用于搜索引擎的解析器。正因为如此,将有数十万甚至数百万的网页需要拆分成单词。
我是否担心使用上述代码该过程可能需要很长时间,或者它是没有根据的。如果它是正确的,任何关于替代可扩展解决方案的建议都将受到欢迎。
编写您自己的实现,该实现返回IEnumerable<string>
延迟执行。例如:
private static IEnumerable<string> CreateSplitDeferredEnumerable(
string str,
char delimiter)
{
var buffer = new StringBuilder();
foreach (var ch in str) {
if (ch == delimiter) {
yield return buffer.ToString();
buffer.Length = 0;
} else {
buffer.Append(ch);
}
}
if (buffer.Length != 0) {
yield return buffer.ToString();
}
}
public static IEnumerable<string> SplitDeferred(this string self, char delimiter)
{
if (self == null) { throw new ArgumentNullException("self"); }
return CreateSplitDeferredEnumerable(self, delimiter);
}
您可以枚举返回的可枚举,而不是一次性拆分字符串并返回每个子字符串的数组(这将消耗大量内存),并且字符串将即时拆分为多个片段。假设您没有在每次迭代后保留枚举的字符串对象,它们将立即有资格进行垃圾收集。