mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-15 11:17:53 +01:00
Improve DeduplicatePrograms by using a set instead of distinct (#7223)
Co-authored-by: Roy <royvou@hotmailcom>
This commit is contained in:
@@ -890,16 +890,18 @@ namespace Microsoft.Plugin.Program.Programs
|
||||
// Overriding the object.GetHashCode() function to aid in removing duplicates while adding and removing apps from the concurrent dictionary storage
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return new RemoveDuplicatesComparer().GetHashCode(this);
|
||||
return RemoveDuplicatesComparer.Default.GetHashCode(this);
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
return obj is Win32Program win && new RemoveDuplicatesComparer().Equals(this, win);
|
||||
return obj is Win32Program win && RemoveDuplicatesComparer.Default.Equals(this, win);
|
||||
}
|
||||
|
||||
private class RemoveDuplicatesComparer : IEqualityComparer<Win32Program>
|
||||
{
|
||||
public static readonly RemoveDuplicatesComparer Default = new RemoveDuplicatesComparer();
|
||||
|
||||
public bool Equals(Win32Program app1, Win32Program app2)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(app1.Name) && !string.IsNullOrEmpty(app2.Name)
|
||||
@@ -933,9 +935,8 @@ namespace Microsoft.Plugin.Program.Programs
|
||||
// Deduplication code
|
||||
public static Win32Program[] DeduplicatePrograms(ParallelQuery<Win32Program> programs)
|
||||
{
|
||||
var uniqueExePrograms = programs.Where(x => !(string.IsNullOrEmpty(x.LnkResolvedPath) && ExecutableApplicationExtensions.Contains(Extension(x.FullPath)) && !(x.AppType == ApplicationType.RunCommand)));
|
||||
var uniquePrograms = uniqueExePrograms.Distinct(new RemoveDuplicatesComparer());
|
||||
return uniquePrograms.ToArray();
|
||||
var uniqueExePrograms = programs.Where(x => !(string.IsNullOrEmpty(x.LnkResolvedPath) && ExecutableApplicationExtensions.Contains(Extension(x.FullPath)) && x.AppType != ApplicationType.RunCommand));
|
||||
return new HashSet<Win32Program>(uniqueExePrograms, new RemoveDuplicatesComparer()).ToArray();
|
||||
}
|
||||
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Keeping the process alive but logging the exception")]
|
||||
|
||||
Reference in New Issue
Block a user