【发布时间】:2010-11-06 18:31:05
【问题描述】:
我即将开始一个项目,该项目将获取文本块,将大量数据解析为某种对象,然后可以对其进行序列化、存储和统计/数据收集。这需要尽可能快,因为我需要开始处理超过 10,000,000 个文本块,并且每天将获得 100,000 个。
我在具有 12 个至强内核 + 超线程的系统上运行它。我也可以访问/了解一点关于 CUDA 编程的知识,但对于字符串的东西,我认为它不合适。从每个字符串中,我需要解析大量数据,其中一些我知道确切的位置,有些我不知道,需要使用正则表达式 / 一些聪明的东西。
所以考虑这样的事情:
object[] parseAll (string [] stringsToParse)
{
parallel foreach
parse( string[n] )
}
object parse(string s)
{
try to use exact positions / substring etc here instead of regex's
}
所以我的问题是:
- 使用正则表达式的 substr.
- .NET 会比其他语言慢很多吗?
- 我可以进行哪些优化(如果有)来最大化并行度。
- 还有什么我没有考虑过的吗?
感谢您的帮助!很抱歉,如果这是冗长的。
【问题讨论】:
-
我的猜测是 IO 将成为限制因素。设置一些简单的测试用例并分析您的资源使用情况等。
-
在现代 PC 上,您所说的卷对于数据仓库工作来说是小菜一碟。你提出的方法听起来,呃,好的。当您知道可以安全地搜索固定字符串时,还可以考虑使用 IndexOf 之类的东西。如果比较函数支持忽略大小写,请尽可能避免使用 ToUpper/Lower。但首先,为了可读性而编写,然后进行优化。
标签: c# regex parsing string parallel-processing