mirror of
https://github.com/sourcegit-scm/sourcegit
synced 2025-06-16 16:05:00 +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)
|
||||
return true;
|
||||
|
||||
var oldMap = new Dictionary<string, Models.Change>();
|
||||
foreach (var c in old)
|
||||
oldMap.Add(c.Path, c);
|
||||
|
||||
foreach (var c in cur)
|
||||
for (int idx = 0; idx < old.Count; idx++)
|
||||
{
|
||||
if (!oldMap.TryGetValue(c.Path, out var o))
|
||||
return true;
|
||||
|
||||
if (o.Index != c.Index || o.WorkTree != c.WorkTree)
|
||||
var o = old[idx];
|
||||
var c = cur[idx];
|
||||
if (o.Path != c.Path || o.Index != c.Index || o.WorkTree != c.WorkTree)
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue