我需要按给定的标签顺序重新排列一个大型XML文档(大小> 50 GB)。
对于前: 订单[] = {o3,o2,o1};
Inputfile中:
<objects>
<o1>
// Some Data
</o1>
<o2>
// Some Data
</o2>
<o3>
// Some Data
</o3>
</objects>
输出文件:
<objects>
<o3>
// Some Data
</o3>
<o2>
// Some Data
</o2>
<o1>
// Some Data
</o1>
</objects>
我的方法: 我从开始阅读文件,直到我遇到对象标签,然后我创建标签o1,o2,o3的临时文件,并执行此操作,直到我到达文件的末尾。现在使用订单创建一个新文件。我使用C ++ ifstream,ofstream来执行上述任务;
这种方法需要6小时才能完成以下任务。 函数原型是:void Rearrange(string tag,string inputfile); 50GB文件中的对象计数大于12000000。 任何人都可以建议我另一种方法来改善表现吗?
提前致谢。
答案 0 :(得分:0)
这很容易。获取64位计算机,并对整个输入和输出文件进行内存映射。获取指向输入文件中所有标记的指针,按标记对指针进行排序,并按排序顺序将它们复制到输出文件中。您的磁盘性能将成为主要瓶颈。