String.Split效率问题

时间:2010-11-08 22:19:44

标签: c# string performance unmanaged

我正在编写一个标记大文本语料库的搜索应用程序。

文本解析器需要从文本中删除任何乱码(即[^ a-zA-Z0-9])

我脑子里有两个想法如何做到这一点:

1)将文本放入字符串中,使用String.tocharArray将其转换为charArray,然后使用循环运行char by char - > while(position< string.length) 这样做我可以在一次运行中对整个字符串数组进行标记。

2)使用string.replace删除所有非数字/ alpha,然后使用某些分隔符删除string.split,这意味着我必须在整个字符串上运行两次。 一旦删除坏字符然后再拆分它。

我认为,因为#1与#2相同,但在O(n)中它会更快,但在测试两者之后,#2的方式(方式!)更快。

我更进一步,使用red-gate .net反射器查看了String.Strip背后的代码。 它像char一样运行非托管char,但速度要快得多。

我不知道为什么#2比#1快。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这个想法怎么样:

  1. 创建字符串
  2. 将整个数据集加载到字符串
  3. 创建一个具有足够预分配空间的StringBuilder来保存整个字符串
  4. 通过字符串逐个字符,如果字符是字母数字,则将其添加到StringBuilder。
  5. 最后,从StringBuilder中获取字符串。
  6. 我不知道这对你已经尝试过的事情是否会更快,但上述时间至少应该回答这个问题。

答案 1 :(得分:0)

djTeller,
#2更快的事实仅仅与您的#1方法有关 您可能想与我们分享您的#1方法;也许它只是非常慢,甚至可以使它比#2快。
是的,两者基本上都是O(n),但是ACTUAL实现O(n);你怎么做#1?

另外,当你说你测试了两者时,我希望你做了大量的输入来克服误差,并看到两者之间的显着差异。