1

我有一个文档,其中的单词将由空格分隔和提取。为此,我使用了以下代码。

string[] words = s.Split(' ');

现在的问题是我要将此代码用于搜索引擎的解析器。正因为如此,将有数十万甚至数百万的网页需要拆分成单词。

我是否担心使用上述代码该过程可能需要很长时间,或者它是没有根据的。如果它是正确的,任何关于替代可扩展解决方案的建议都将受到欢迎。

4

1 回答 1

0

编写您自己的实现,该实现返回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);
}

您可以枚举返回的可枚举,而不是一次性拆分字符串并返回每个子字符串的数组(这将消耗大量内存),并且字符串将即时拆分为多个片段。假设您没有在每次迭代后保留枚举的字符串对象,它们将立即有资格进行垃圾收集。

于 2013-08-23T16:22:55.810 回答