2013-04-22 78 views
1

我正在处理的行数可以在60000行的文件。 这些文件存储在perforce中。 为了计算一些统计数据,如添加的行数和行数注释,我使用了给出文件内容的方法repository.GetFileAnnotations(),结果返回为FileAnnotation的Ilist,每个fileAnnotation封装了一行文件。 所以我有义务创建一个临时文件并使用foreach读取所有Ilist,并在此文件中写入每一行。这使得应用程序不够快。 我该如何着手优化这种机制。输入输出的优化

string tempfile = CreateTmpFile(); 
FileSpec fso = new FileSpec(FileSpec.DepotSpec(fsd.depotPath).DepotPath, Revision.Head); 
IList<FileSpec> fsos = new List<FileSpec>(); 
fsos.Add(fso); 
Options opts = new Options(); opts.Add("-a", ""); 
IList<FileAnnotation> fas = rep.GetFileAnnotations(fsos, opts); 

foreach (FileAnnotation fa in fas) 
{ 
    lines4 += fa.Line; 
    UpdateTmpFile(tempfile, fa.Line); 
} 
+1

我会考虑从基于文件的数据存储转移到实际的数据库 – Alex 2013-04-22 14:58:25

+0

@亚历克斯请解释 – gasroot 2013-04-22 15:07:32

+1

可能相关:http://stackoverflow.com/q/5240218/56778 – 2013-04-22 15:19:00

回答

1

您是否想过使用diff2命令?它会给你任何两个版本的diff输出,所以你可以开始比较添加,更改,删除等行。它肯定比解析每行的注释更有效率。

+0

是的,我用p4 diff2,它工作得很好,但问题仍然存在其他指标 – gasroot 2013-04-22 15:07:05

+0

diff2命令中有一个错误@ p4-randall – gasroot 2013-04-22 16:44:58