libgit2 / libgit2/libgit2sharp
repo.Commits.QueryBy(filename) slow on large repos
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- C#
- Sterne
- 3.5k
- Forks
- 925
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
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
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, den Vergleich zwischen TestSlow mit repo.Commits.QueryBy(path) und git log --follow --oneline -- <file> in einem großen Repository zu reproduzieren. Verwende die gemeldete Profiler-Ansicht und die Zeitmessungen, um zu ermitteln, wo QueryBy seine Zeit verbringt. Als abgeschlossen gilt die Aufgabe, wenn die Laufzeit im großen Repository auf die des vergleichbaren git-Befehls reduziert wird und dabei die zurückgegebenen Commit-Einträge erhalten bleiben.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- csharp, git
- Bereich
- performance
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100