mirror of
https://github.com/sourcegit-scm/sourcegit
synced 2025-06-17 00:14:59 +00:00
perf: optimize the WorkingCopy.IsChanged()
method (#1418)
* There's no need to populate a Dictionary just to diff the the "old" and "cur" Lists of Changes. * If the two lists are of equal length and no change has occurred, we can assume that they are also reported in equal sort-order (by git-status). * Thus, we only need to compare the two items at each successive index.
This commit is contained in:
parent
f88652ffdd
commit
28844c59cf
1 changed files with 4 additions and 9 deletions
|
@ -1778,16 +1778,11 @@ namespace SourceGit.ViewModels
|
||||||
if (old.Count != cur.Count)
|
if (old.Count != cur.Count)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
var oldMap = new Dictionary<string, Models.Change>();
|
for (int idx = 0; idx < old.Count; idx++)
|
||||||
foreach (var c in old)
|
|
||||||
oldMap.Add(c.Path, c);
|
|
||||||
|
|
||||||
foreach (var c in cur)
|
|
||||||
{
|
{
|
||||||
if (!oldMap.TryGetValue(c.Path, out var o))
|
var o = old[idx];
|
||||||
return true;
|
var c = cur[idx];
|
||||||
|
if (o.Path != c.Path || o.Index != c.Index || o.WorkTree != c.WorkTree)
|
||||||
if (o.Index != c.Index || o.WorkTree != c.WorkTree)
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue