处理平面文件

时间:2012-02-08 17:26:14

标签: .net algorithm c#-4.0

我的服务从许多客户端收到大的txt平面文件(40 mb)(一分钟内可以从1到30个客户端) 如果数据格式或数据中没有错误,则必须将每行转换为实体。 在一行中没有分隔符,每行划分固定的子串长度,因此每个子串都是实体的字段。 所以我的问题是如何快速解析庞大的txt平面文件到实体数组?

服务是在C#4.0中开发的。但是如果C#

中的性能较弱,则可以用其他语言开发算法

2 个答案:

答案 0 :(得分:2)

我在这里有几个决定因素。如果我在数据库或XML中有最终状态,我可能会使用Altova的MapForce FlexText来创建看起来像是一个简单的映射。这应该是相对高效的。

如果我需要首先解析类进行处理,我可能会使用一个简单的StreamReader并逐行解析它。

  using (StreamReader sr = new StreamReader(filePath)) 
  {
      string line;

      while ((line = sr.ReadLine()) != null) 
      {
          ProcessLine(line);
      }
  }

答案 1 :(得分:1)

我刚刚编写了一个快速测试,创建并将带有8个属性的.5百万个对象转储到文本文件中(每行1个)我将这些对象填充到固定长度,并将int值转换为字符串。生成的行创建了一个50mb的文件。

读回来并创建对象的实例,解析int等在我的电脑上花了大约3秒(没有使用高性能计数器)。

我也使用了一个流式读取器,正如Jacob所建议的那样,但我认为最终这很大程度上取决于你的硬件,所涉及的错误检查的复杂性,它有多少行以及你想要对象做什么拥有它们。

不确定这是否有帮助!