libgit2 / libgit2/libgit2sharp
repo.Commits.QueryBy(filename) slow on large repos
Nessuno ha ancora preso questa issue.
- Lingua principale
- C#
- Stelle
- 3.5k
- Fork
- 925
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
Reproduction steps
1): Clone a large repo
2): run this function on that repo with some random file:
public IEnumerable<string> TestSlow(string filename)
{
using (var repo = new Repository(repoRoot))
{
string path = filename.Substring(repoRoot.Length + 1).Replace("\\", "/");
foreach (LogEntry entry in repo.Commits.QueryBy(path))
{
yield return entry.Commit.Author.ToString();
}
}
}
- run this command on the same file: "git log --follow --oneline -- "
Expected behavior
I expect similar time to be taken by TestSlow and the git log command above
Actual behavior
The git log command finishes in about 1.6 ms on my repo
The TestSlow command takes about 70 seconds.
Here is what I see in my profiler:

Version of LibGit2Sharp (release number or SHA1)
0.27.0-preview-0017
0.26.1
0.24.1
Operating system(s) tested; .NET runtime tested
.NET Framework 4.7.2 on Windows 10
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia riproducendo il confronto tra TestSlow che usa repo.Commits.QueryBy(path) e git log --follow --oneline -- <file> su un repository di grandi dimensioni. Usa la vista del profiler e i tempi riportati per individuare dove QueryBy impiega il proprio tempo. Il lavoro è completato quando il tempo di esecuzione sul repository di grandi dimensioni viene ridotto avvicinandolo a quello del comando git comparabile, preservando le voci di commit restituite.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- csharp, git
- Ambito
- performance
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100