我想只显示存储库的前100个提交。我用linux-repo测试了这个:
const int maxSize = 100;
Stopwatch sw = new Stopwatch();
Console.WriteLine( "Getting Commits in own Thread" );
sw.Start();
using( Repository repo = new Repository( path_to_linux_repo ) )
{
ICommitLog commits = repo.Commits.QueryBy( new CommitFilter { Since = "HEAD" } );
int index = 0;
foreach( Commit commit in commits )
{
if( index++ > maxSize ) break;
}
}
sw.Stop();
Console.WriteLine( "Took {0}ms for {1} entries", sw.ElapsedMilliseconds, maxSize );
这个简单的循环在我的机器上占用了9000ms。当使用具有较少提交的repo时,它的FAR更快,但是为什么在使用大量提交的repos中这么慢? 另一个问题是:是否可以只检索给定数量的提交,例如翻页 所有提交?
答案 0 :(得分:3)
我可以在这里重现。绝对太长了。看起来libgit2在返回之前将整个图表排入队列,这将是给定设置的错误。你介意打开一个问题吗?
对于检索大量提交,迭代是基于拉取的,因此您只需要从存储库中获取尽可能多的提交。提交日志实现IEnumerable
,因此您可以使用您喜欢的任何LINQ方法(或者像本示例中那样手动执行)。
<强>更新强>
这个bug非常令人尴尬,但libgit2中有一个 PR to fix it ,它将在适当的时候进入libgit2sharp版本。通过修复,此测试现在需要大约80毫秒。谢谢你提出来。
更新2:
此修复程序现在可在LibGit2Sharp的vNext
分支中找到。