缘起
因为需要分析 tfs 提交日志,并按照一定条件(比如,提交信息或者用户名)分类整理,特意写了这个小工具。在使用过程中发现,某些情况下会花费很长时间才能返回处理结果,当时稍稍做了一些优化,已经能满足当时的应用场景了。但是在处理大文件的时候依然会花费很长时间。忍了这么久了,终于有机会做一次效率优化了。
实现逻辑介绍
整体实现逻辑并不复杂,这里稍微作下介绍:
打开需要处理的日志文件(通过 -t 参数传递,如果没指定就默认打开 tfs.txt),然后按行读取,并通过 IsSplitter() 函数判断当前行是否是分割符(由很多 - 组成),如果是就继续读取相关的字段(变更集,用户,日期,注释,项 等),直到遇到下一个分隔符或者文件结尾。找出一条完整的提交记录后,会根据用户指定的过滤条件进行过滤分组,把结果输出到对应的文件中。整个过程完全是在主线程中完成的,没有用到辅助线程。
这里列出两个关键的结构定义:
class ItemInfo
{
public string status;
public string path;
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.AppendFormat(@" {0} {1}{2}", status, path, Environment.NewLine);
return sb.ToString();
}
}
class TfsLogInfo
{
public string changeset = "";
public string commitUser = "";
public string commitDate = "";
public string commitM |

本文详细记录了一次.NET程序性能优化的过程,通过使用Process Explorer快速定位到问题代码,发现并优化了一个正则表达式,从而显著提升了处理大文件的效率,时间从原来的几分钟缩短到不到1秒。
最低0.47元/天 解锁文章
9万+

被折叠的 条评论
为什么被折叠?



